(作成中)
Fragmentのサンプル
難しい話は置いといて結果的にどうなるのか、Android 3.1のエミュレータにインストールされている「ApiDemo」でUIを確認。
サンプルプログラムはこちら。
http://developer.android.com/intl/ja/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html
ActivityにFragmentを追加しているのは以下のコード。
// Check what fragment is currently shown, replace if needed. DetailsFragment details = (DetailsFragment) getFragmentManager().findFragmentById(R.id.details); if (details == null || details.getShownIndex() != index) { // Make new fragment to show this selection. details = DetailsFragment.newInstance(index); // Execute a transaction, replacing any existing fragment // with this one inside the frame. FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.details, details); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); }
以下の箇所で、「containerViewをR.id.detailsとして、フラグメントdetailsに置き換えます」と指定。
ft.replace(R.id.details, details);
ft.commit()後、DetailsFragment.onCreateView()がコールされて、フラグメントのViewをActivityに渡している。
Hierarchy ViewでView階層を確認。
ピンク枠がFragmentのcontainerView(親View)
黄色枠がFragmentが持っているView
GingerBread以前のバージョンでもLayout.xmlを駆使すれば、
見た目は真似できますね。
Fragmentのライフサイクル
FragmentのライフサイクルはActivityのライフサイクルに結び付けられています。Resume状態になるまでに呼び出されるライフサイクルメソッド
method | 内容 |
---|---|
onAttach() | Activityに関連付けれた際に1度だけコールされる |
onCreate() | fragmentの初期化生成のためによばれる |
onCreateView() | fragmentのView階層を生成し戻り値として返す |
onActivityCreated() | Activity.onCreaateが完了したことをframentに通知 |
onStart() | ActivityのonStart()と同等 |
onResume() | ActivityのonResume()と同等 |
Destroy状態になるまでに呼び出されるライフサイクルメソッド
method | 内容 |
---|---|
onPause() | fragment操作が一時停止状態に陥るとき、ActivityのonPause()と同等 |
onStop() | fragment操作が一時停止状態となりユーザーから見えない状態、ActivityのonStop()と同等 |
onDestroyView() | fragmentのView階層をCleanUp可能な状態 |
onDestroy() | fragmentをCleanUp可能な状態 |
onDetach() | Activityとの関連付けが解除された状態 |
上記のfragmentのライフサイクルとActivityのライフサイクルとの関係を、図に記す。
(developerサイトから拝借)
(作成中)
参考
http://developer.android.com/intl/ja/reference/android/app/Fragment.html
http://developer.android.com/intl/ja/guide/topics/fundamentals/fragments.html