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);
  }
}

これはうまくいきます。テキストビューを表示します。テキストビューのテキストをプログラムで編集したいと思います。まず、フラグメント内から編集することから始めようと思いました。だから私はそれを行うことができるはずの方法を持っています。コメントを外す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 に答える