お勉強ダイアログ

プログラミングの勉強した内容を自分のために書き残してるだけです

AndroidのFragmentについて(最初の最初)

AndroidのFragmentについて、基本の使い方をまとめる。
公式ドキュメントは
フラグメント  |  Android Developers
フレキシブルな UI のビルド  |  Android Developers
である。

概要

Fragmentの基本的なメリットと使い方は、

  • 画面の処理をActivityに依存しないこと
  • 複数のFragmentを1つの画面に表示できること

だと思う。

詳細

具体的な使い方は、

  1. ActivityのxmlにFrameLayoutを設定する
  2. FrameLayoutにFragmentをaddする
  3. 場合によって別のFragmentをaddやreplaceする

ActivityのxmlにFrameLayoutを設定する

Fragmentを挿入したい箇所に以下のようなLayoutを入れておく。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

FrameLayoutにFragmentをaddする

ActivityのonCreateメソッドに以下のコードでFragmentをaddする。

supportFragmentManager.beginTransaction().add(R.id.fragment_container, MainFragment()).commit()

addの第1引数がaddするLayout、第2引数が入れ込むFragmentである。

場合によって別のFragmentをaddやreplaceする

画面変換する際には、Fragmentをaddもしくはreplaceすることができる。
addは

fragmentManager!!.beginTransaction().apply {
    add(R.id.fragment_container, SecondFragment())
    commit()

replaceは

fragmentManager!!.beginTransaction().apply {
    replace(R.id.fragment_container, BlankFragment())
    commit()
}

Activityでの記載のように1行で書くことももちろんできる。

また、addとreplaceの違いは、

  • addは上に乗せるので、場合によっては文字が重なったりもする
  • replaceは完全に置き換える

といった感じ。

さらに、両方とも上記のコードではバックボタンを押すとActivityの動きに連動してしまう。
つまり、前のFragmentに戻るということはしてくれない。
しかし、以下のようにコードを修正すれば、バックボタンを押すことで一つ前のFragmentを表示することができる。

fragmentManager!!.beginTransaction().apply {
    addToBackStack(null)
    replace(R.id.fragment_container, BlankFragment())
    commit()
}

addToBackStack(null)というのが、Stackに追加するメソッドである。

Fragmentにボタン等のListnerを設置する場合

FragmentのListnerを設置する時、Activitiと同じようにonCreateにするとまだViewを読み込まれていないため例外が発生する。
FragmentではViewが読み込まれるのが、onCreateViewなので、それ以降である必要がある。
そこで、onViewCreatedに設置すると良い。
このメソッドは、Viewが読み込まれた直後に実行されるメソッドなのでListnerの設置にはベストだと思われる。

おわり

Fragmentのとりあえずの使い方をまとめてみた。
これから、より高度なことを勉強したら、また別でまとめる。