フラグメントが最初に作成されてからアクティビティに再アタッチされたときに、フラグメントのコールバックで取得するsavedInstanceState バンドルに関して質問があります。
そのため、setRetainInstance(true) を使用します。その結果、フラグメントは破棄されるべきではありませんが、アクティビティが破棄されたときにアクティビティからアタッチされず、たとえば構成変更でアクティビティが再作成されたときに再びアタッチされます。
したがって、この setRetainInstance(true) を使用すると、savedInstanceState バンドルが次のonActivityCreated()
ようなフラグメントのコールバックで常に null になるためですonCreate()
。
これまでのところ、このsavedInstanceStateがフラグメントでnullではないことが原因で、一部のユーザー(非常に少数)からクラッシュが発生しています。
したがって、 onActivityCreated() コールバックは次のようなことをしています:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
adapter = new CustomAdapter(getActivity(), getListView(), data, savedInstanceState);
setListAdapter(adapter);
setupEmptyListView();
getListView().setOnScrollListener(this);
}
CustomAdapter は、ある時点でそのコンストラクターから、loadInstanceState()
そのジョブを実行するメソッドを呼び出しています。以下のコード:
@Override
public void loadInstanceState(Bundle savedInstanceState) {
if (savedInstanceState != null) {
//do some stuff which is causing a crash
}
}
今私の質問は、私が渡しているsavedInstanceStateが常にnullである必要がある場合、どのようにしてそのifステートメントに入ることができるかということです。
そして今、質問:
Androidは setRetainInstance(true)
、コールバックに渡されるsavedInstanceStateバンドルがフラグメントで使用するときに常にnullになることを保証していますか?
答えてくれてありがとう!