liguofeng29’s blog

個人勉強用ブログだっす。

AndroidのFragment - 概要

FragmentはAndroid3.0から導入した新しいAPIである。
Fragmentは言葉の通り断片の意味でActivityの断片である。
 
目的

タブレットの出現により画面が大きくなり、
スマホより多くの部品を一つの画面に配置できるようになったからのである。

 

Fragmentの特性

  • FragmentはActivityの構成部品であり、FragmentはgetActivity()で所属Activityを取得し、Activityは FragementManagerのfindFragmentById() OR findFragmentByTag()でFragmentを取得する
  • Activity実行中に,FragmentManagerのadd(), remove(), replace()で動的にFragmentの操作ができる
  • 一つのActivityは複数のFragmentを持ち、Fragmentは複数のActivityの所属される
  • Fragmentは自分自身のLifecycle(生成から破棄まで)をもっていて、自分自身へ対するイベントも受けれる。でもFragmentはActivityに所属するので、ActiviyのLifecycleに依存する。
    例えば、
    Activityが休止状態だとFragmentと休止状態になり、
    Activityが破棄されるとFragmentも一緒に破棄される。
    Activityが実行状態の場合のみ、Fragmentの操作が可能になる。 
Fragmengの生成

1. Fragmentは必ずFragmentサブクラスを継承しないといけない
2. Fragmentのサブクラス
  • DialogFragment
  • ListFragment
  • PreferenceFragment
  • WebViewFragment
3. 一般的に下記メソッドをオーバライドする。
  • onCreage() - インスタンス生成後呼ばれる
  • onCreateView() - Fragmentが表示するViewを返す
  • onPause() - Fragmentを離れた時呼ばれる
  • などなど
 
FragmentとActivityの通信

  • Activity ⇒ Fragment
Activity内でBundle生成し、FragmentのsetArgument(Bundle bundle)メソッドでデータを渡す

 

  • Fragment ⇒ Activity   

Fragment内で内部Callbackインターフェースを実装し、当該Fragmentを含むActivityがCallbackを実装する

 

サンプルコードはココ

 

FragmentManagerとFragmentTransaction

FragmentMangerの機能
  • findFragmentById() OR findFragmentByTag()でFragmentを取得する
  • popBackStack()でFragmentをバックキューからポップアップ(backキー)
  • addOnBackStackChangeListner()でリスナーを登録し、バックキュー変化を監視
 
FragmentTransactionの機能
・add(), remove(), replace(), commit()
 
サンプルコード
getFragmentManager()
     .beginTransaction()
     .replace(R.id.book_detail_container, fragment)
     .commit();
 
FramgmentのLifecycleとCallback

実行状態 - Fragmentが前面に表示され、カーソル取得可能。
休止状態 - ほかのActivityが前面に表示され、カーソル取得不可。
停止状態 - Fragmentが見えない、カーソル取得不可。
破棄状態 - Fragmentが完全削除、もしくはFragment所属するActivity終了。

 

起動から破棄までの詳細の流れはココです。