1

中にイベントリスナーをインストールしてもonCreateViewうまくいかないことがあります。たとえば、リストビューのクリックリスナーをインストールする例を取り上げListFragmentます

動作しません

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    ListView listView = (ListView)v.findViewById(android.R.id.list);
    // Won't work?! Listener will not be triggered.
    listView.setOnItemClickListener(new ListViewOnItemClickListener()); 
    // Installing long click listener does work somehow...

動作します!

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    // Works!
    this.getListView().setOnItemClickListener(new ListViewOnItemClickListener());  

onCreateView 中にイベントリスナーをインストールするのは間違っているのでしょうか? これがドキュメントに記載されていることがわかりません。

4

2 に答える 2

0

イベントリスナーロジックで getActivity() を呼び出す場合、それは間違いなく onActivityCreated メソッドにある必要があります (つまり、何かをロードしているときに進行状況ダイアログを使用する場合、Toast メッセージ、onPreExecute のロジックで AsyncTask を使用する場合)。 onActivityCreated の後でのみ、getActivity() が null を返さないことを確認できます。それ以外の場合は、onCreateView でイベント リスナーを設定しても問題ないでしょう。また、上記のロジックに onAttach(Activity activity) を使用しないでください。ここではアクティビティへの参照のみを取得できます。これは、フラグメントを保持するアクティビティが完全に作成されて機能することを意味するわけではなく、onActivityCreated の後にのみ完全に機能します。と呼ばれる

于 2015-04-16T08:30:22.100 に答える