如何在片段中使用方法?

时间:2013-10-06 13:47:40

标签: java android xml android-fragments

我正在尝试编写一个片段,其中包含一个在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。我现在想以编程方式编辑textview中的文本。我以为我首先要从片段中编辑它。所以我有了应该能够做到的方法。当我现在取消注释setText("set it to something");时,它会给我一个InflateException: Error inflating class fragment.,我不知道为什么。

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

2 个答案:

答案 0 :(得分: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);
   }
}

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

答案 1 :(得分: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");
}