2016-12-27 13 views
1

私の2つのフラグメントでlistviewウィジェットを取得しようとしていますが、私はこのコードをどこに置いても、コンパイラはNULLポインタエラー:プログラマチックにフラグメントビューにアクセスするのはいつ安全でしょうか

ListView list = (ListView) getView().findViewById(R.id.tasksList); 
    list.setAdapter(GroupContentActivity.tasksAdapter); 

tasksAdapterは主なアクティビティに保持された静的な配列アダプターでなければなりません。

フラグメントが作成されるとすぐにアダプタをリストに接続するために、このコードをどこに置くことができますか? 2つのフラグメントはフラグメントタブホストに保持されます。

また、私のタスクアダプターを見つけることができないようですが、私は脳のおならを持っていると確信していますが、間違っていますか?

それはそうのような任意の方法の外で宣言されています:

private static ArrayAdapter<String> tasksAdapter; 

などのような活動ののonCreateメソッドでインスタンス化:

chatAdapter = new ArrayAdapter<String>(this, R.layout.fragment_group_chat); 

私はアダプタのデフォルトの内容を設定することがあります私がその点に着いたとき。

+0

*が生成される可能性があります。* findViewByIdがnullを返す可能性があるため、NullPointerExceptionは警告のみです。とにかく、静的変数も避けてください。フラグメントにListViewがある場合は、そこにもアダプタを入れてください –

+0

なぜgetView()を使用していますか?それは断片の中にありますか? 'View rootView = inflater.inflate(R.layout.your_fragment_layout、container、false);'& 'ListView list =(ListView)rootView.findViewById(R.id.taskList)'で置き換えてください。または、ビューを簡単にバインドするための[here](http://jakewharton.github.io/butterknife/)を持ってください –

+0

リストを返すアクティビティにgetterメソッド(getList)を追加できます。 あなたのフラグメントからは、 (ActivityName)getActivity()。getList() によって参照を得ることができます。しかし、@ cricket_007によると、これらのタイプの静的変数 –

答えて

0

Lintは、使用前にヌル参照をチェックしていないことを警告しています。あなたがあなたのコードを変更した場合

ListView list = (ListView) getView().findViewById(R.id.tasksList); 
    if (list != null) { 
     list.setAdapter(GroupContentActivity.tasksAdapter); 
    } 

警告が消えます。

関連する問題