google-code-prettify

2013-06-07

onCreateの引数savedInstanceStateは、Fragmentが再生成したかどうかの判断には(厳密には)使えない

Fragmentの再生成が起こるときには、onCreate(Bundle savedInstanceState)のsavedInstanceStateが必ず!=nullになる。

…と思っていたのだが、そうはならない条件があることがわかった。
つまり、Fragmentが再生成されたにも関わらず、savedInstanceState=nullとなる場合がある。

再生成されたのにsavedInstanceState=nullになるのは、以下の2つの条件を満たした場合。
  1. FragmentがUIを持たない。つまり、onCreateViewでnullを返している
  2. onSaveInstanceState(Bundle outState)で、outStateに何もputしていない

要は、Bundleに誰も何もセットしていない場合には、再生成時のsavedInstanceStateはnullになる(空のBundleが渡されてくるわけではない)。

なお、Viewは自らの状態をBundleに保存しているので、FragmentがViewを持つ場合には通常Bundleは空にはならない。そのため、savedInstanceStateがnullかどうかによって、再生成かどうかを判断できる。

0 件のコメント: