1つのアクティビティと3つのフラグメントで構成されるアプリケーションがあります。アクティビティは、適切なフラグメントを作成するボタンを備えたメニューを作成します。私のコードは画面を回転させなくても完全に機能しますが、画面を回転させると壊れます。
私の最初の試みにはsetRetainInstance(true)
、フラグメントを作成するときの呼び出しは含まれていませんでした。それで私が見つけた問題は、フラグメントを2回置き換えた後(1つのフラグメントがバックスタックに残っている)、画面を回転させると、現在表示されていないフラグメントでnullポインター例外が発生することです。編集:注意してください、nullポインタ例外はsetOnItemClickListener
以下に示す呼び出しにあります。 メソッドlv
で宣言されています。onCreateView()
2回目の試みではsetRetainInstance(true)
、フラグメントを作成するときに呼び出しを含めました。これで最初の問題は解決しました。ただし、フラグメントの1つはでありListFragment
、画面を回転させると、OnItemClickListener
が設定されていないように見えます。リスナーを設定するための私のコードは次のとおりです。
ListAdapter adapter = new SimpleAdapter(getActivity(),
gameslist, R.layout.list_object,
new String[] { TAG_ID, TAG_NAME, TAG_LOCATION, TAG_CREATED },
new int[] { R.id.id, R.id.name, R.id.location, R.id.created_date });
setListAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0,
View arg1, int position, long arg3) {
// ...
}
});
この問題に対するアイデアや解決策はありますか?フラグメントを使用して設計する方法についての私の理解は完全にオフになっていますか?
助けてくれてありがとう!
編集:また、私の理解のために、コードのどこにフラグメントが再作成されていますか?彼らはoncreate()
私の活動の機能ではありません。ありがとう!
理解した!画面が回転したときに呼び出されていたonCreate()関数でAsyncTaskを呼び出していました。ただし、onCreateView()関数でlvを宣言していました。これは、ビューが作成されるまで呼び出されません。Nullpointerexception!