Android フラグメント(Fragment)
フラグメントはアクティビティの一部であり、アクティビティをよりモジュール化された設計にします。フラグメントは一種のサブアクティビティと考えることができます。
以下はフラグメントに関する重要な知識ポイントです -
- フラグメントは独自のレイアウト、独自の動作、独自のライフサイクルコールバックを持ちます。
- アクティビティが実行されているとき、アクティビティ内でフラグメントを追加または削除できます。
- 複数のフラグメントを1つのアクティビティにまとめて、マルチカラムのUIを構築できます。
- フラグメントは複数のアクティビティで使用できます。
- フラグメントのライフサイクルは、そのホストアクティビティと密接に関連しています。つまり、アクティビティが一時停止されると、アクティビティ内のすべてのフラグメントも停止されます。
- フラグメントはユーザーインターフェースコンポーネントなしで動作を実装できます。
- フラグメントはAndroid APIバージョン11でAndroid APIに追加されました。
フラグメントはFragmentクラスを継承して作成します。使用することによって、
フラグメントが導入される前は、一度に画面上に表示できるのは単一のアクティビティだけだったため、制限がありました。デバイスの画面を分割して、異なる部分を独立して制御することはできませんでした。フラグメントの導入により、柔軟性が高まり、一度に画面上に単一のアクティビティしか表示できないという制限が取り除かれました。現在は単一のアクティビティを持つことができますが、各アクティビティは複数のフラグメントで構成され、各フラグメントには独自のレイアウト、イベント、完全なライフサイクルがあります。
以下は、フラグメントで定義された2つのUIモジュールを、タブレット向けに設計されたアクティビティでは組み合わせ、ハンドヘルドデバイス向けに設計されたアクティビティでは分離する方法を示す典型的な例です。

タブレットサイズのデバイスで実行すると、このアプリはアクティビティAに2つのフラグメントを埋め込むことができます。スマートフォンの画面ではスペースが十分でないため、アクティビティAには記事リストのフラグメントのみが含まれ、ユーザーが記事をクリックすると、2番目のフラグメントを含むアクティビティBが起動して記事を読むことができます。
フラグメントのライフサイクル
Android のフラグメントには、Android のアクティビティとよく似た独自のライフサイクルがあります。以下に、そのライフサイクルのさまざまな段階を簡単に説明します。

これは、Fragmentクラスでオーバーライドできるメソッドのリストです:
- onAttach(): フラグメントインスタンスがアクティビティインスタンスに関連付けられます。フラグメントとアクティビティはまだ完全には初期化されていません。通常、このメソッドでアクティビティへの参照を取得し、フラグメントの将来の初期化処理で使用します。
- onCreate(): フラグメントが作成されるときに、システムはこのメソッドを呼び出します。フラグメントの必要なコンポーネントをいくつか初期化する必要があります。これらのコンポーネントは、フラグメントが一時停止または停止されたときに保持し、復元できるようにする必要があります。
- onCreateView(): フラグメントが初めてユーザーインターフェースを描画しようとするときに、システムはこのメソッドを呼び出します。フラグメントのUIを描画するには、フラグメントのルートレイアウトを表すViewコンポーネントをこのメソッドから返す必要があります。フラグメントがユーザーインターフェースを提供しない場合は、nullを返します。
- onActivityCreated(): ホストアクティビティが作成されると、onCreateView() メソッドの後にこのメソッドが呼び出されます。アクティビティとフラグメントのインスタンス、およびアクティビティのビュー階層が作成されます。この時点で、ビューは findViewById() メソッドでアクセスできます。このメソッドでは、Contextオブジェクトを必要とするオブジェクトをインスタンス化できます。
- onStart(): フラグメントが表示されるときに呼び出されます。
- onResume(): フラグメントが操作可能になるときに呼び出されます。
- onPause(): ユーザーがフラグメントを離れようとしていることを最初に示すときに、システムがこのメソッドを呼び出します。通常、ここでユーザーセッションを超えて保持される永続的な変更をコミットする必要があります。
- onStop(): フラグメントが停止されるときに呼び出されます。
- onDestroyView(): このメソッドが呼び出された後、フラグメントは破棄されます。
- onDestroy(): このメソッドはフラグメントの状態をクリーンアップするために使用されます。ただし、Androidプラットフォームでは必ずしも呼び出されるとは限りません。
フラグメントの使用方法?
ここでは、フラグメントを作成する簡単な手順を説明します。
- まず、アクティビティで必要なフラグメントの数を決定します。例えば、デバイスの横向きと縦向きの2つのモードを処理するために、2つのフラグメントを使用する必要があるとします。
- 次のステップとして、フラグメントの数に基づいて、Fragmentクラスを継承するクラスを作成します。Fragmentクラスには上記のコールバック関数が含まれています。必要に応じて任意のメソッドをオーバーライドします。
- 各フラグメントに対応するレイアウトをXMLファイルに作成する必要があります。これらのファイルには、定義されたフラグメントのレイアウトが含まれます。
- 最後に、要件に基づいてアクティビティファイルを変更し、実際のフラグメント置換ロジックを定義します。
フラグメントの種類
基本的なフラグメントは、次の3つのタイプに分類できます:
- シングルフレームフラグメント- シングルフレームフラグメントは、携帯電話などのハンドヘルドデバイスで使用されます。1つのフラグメントがビデオのように表示されます。
- リストフラグメント- 特別なリストビューを含むフラグメントは、リストフラグメントと呼ばれます。
- フラグメントトランジション- フラグメントトランザクションと一緒に使用されます。あるフラグメントから別のフラグメントへ移動できます。