0

我正在尝试编写一个片段,该片段具有在 TextView 中设置某些内容的方法。所以我有以下片段:

public class DetailFragment extends Fragment {
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.my_fragment, container, false);
//    setText("set it to something");
    return view;
  }

  public void setText(String item) {
    TextView view = (TextView) getView().findViewById(R.id.detailsText);
    view.setText(item);
  }
}

这工作正常。它显示了文本视图。我现在想以编程方式编辑 textview 中的文本。我想我首先要从片段中编辑它。所以我有了应该能够做到的方法。当我现在取消注释setText("set it to something");时,它给了我一个InflateException: Error inflating class fragment.,我不知道为什么。

有人知道我该如何解决这个问题吗?

4

2 回答 2

1

这样做

class ... extends Fragment{
   private TextView _myTextView;

   onCreateView(...){
       //inflate view

       _myTextView = (TextView)view.findViewById(R.id.text_view);
       editText("blablabla");
   }


   private void editText(String text){
       _myTextView.setText(text);
   }
}

Ypu 必须初始化 onCreateView 中的所有 UI 元素,以便从正在膨胀的视图中膨胀!

于 2013-10-06T13:56:04.017 回答
1

如果你想这样做,onCreateView()那么这样做:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.my_fragment, container, false);
    TextView tv= (TextView) view.findViewById(R.id.detailsText);
    tv.setText("set it to something");
    return view;

}

原因是返回getView()之前不能调用onCreateView()

或者onViewCreated()

public void onViewCreated (View view, Bundle savedInstanceState){
    TextView tv = (TextView) view.findViewById(R.id.detailsText);
    tv.setText("set it to something");
    // following will work too here
    // setText("set it to something");
}
于 2013-10-06T13:58:15.893 回答