以下はFragmentライフサイクルの状態遷移図です。
この状態遷移図に加筆したものが以下です。
ライフサイクルイベントとしてonInflate()、onViewCreated()、onViewStateRestored()、onSaveInstanceState()を追加しています。追加したものを含め、Fragmentのライフサイクルイベントを説明します。
onInflate()はFragmentが「レイアウトXML」に配置された場合に呼び出されるライフサイクルイベントです。FragmentがレイアウトXMLに配置されていない場合は呼び出されません。レイアウトに配置した場合、動的に配置する場合に渡せるFragmentへの引数が渡せません。代わりにAttributeSetを使用してレイアウトXMLから属性を渡すことで、Fragmentの挙動を制御します。
onAttach()は、ContextにFragmentがアタッチされた際に呼び出されるライフサイクルイベントです。このタイミング以降でActivityなどのContextを参照することが可能になります。
対応するonDetach()はContextからデタッチされた際に呼び出されます。
onCreate()はFragmentが生成される際に呼び出されるライフサイクルイベントです。ActivityのonCreate()同様、そのFragmentが生存する間必要な処理を初期化します。Fragmentの状態がsavedInstanceStateとして引数で渡されてきますが、この時点ではViewの生成がまだ終わっていないので、状態の復元をするのはお勧めしません。
対応するonDestroy()はFragmentが破棄されるタイミングで呼び出されます。こちらはonCreate()で行った処理の後始末を行います。
onCreateView()は、このFragmentのメインコンテンツとなるViewを生成して返す必要があるライフサイクルイベントです。ここではViewを生成して返すだけにとどめ、Viewの初期化はonViewCreated()で行います。このメソッドにもsavedInstanceStateでFragmentの状態が渡されてきますが、ここでも復元は行いません。
対応するonDestroyView()はViewが破棄される際に呼び出されます。onDestroyView()では特に行うことはないと思います。
onViewCreated()は、このFragmentのViewが生成された後に呼び出されます。Viewの初期化とFragmentの状態の復元はここで行うことを推奨します。
onActivityCreated()は、このFragmentが属するActivityのonCreate()が完了した際に呼び出されるライフサイクルイベントです。Activityの生成が完了した時点で行いたい処理はここに記述します。
onViewStateRestored()は、このFragmentが持つViewの状態が全て復元された際に呼び出されるライフサイクルイベントです。Viewの状態を横断的にチェックしたり更新したりする必要がある場合はここで行います。このメソッドにもsavedInstanceStateとしてFragmentの状態が渡されてきますが、このメソッド名が示す通り、ここで状態を復元するのは推奨できません。
onStart()は、Fragmentが表示される前に呼び出されるライフサイクルイベントです。
対応するonStop()はFragmentが非表示になった際に呼び出されます。
onResume()はFragmentがユーザー操作を行えるようになる直前に呼び出されるライフサイクルイベントです。
対応するonPause()はユーザー操作が行えなくなった際に呼び出されます。
onSaveInstanceState()はFragmentの状態を保存するタイミングで呼び出されるライフサイクルイベントです。ここでFragmentの状態を保存します。Fragmentの状態が保存できるタイミングは、ここだけです。
Copyright © ITmedia, Inc. All Rights Reserved.