AndroidのFragmentについて(最初の最初)
AndroidのFragmentについて、基本の使い方をまとめる。
公式ドキュメントは
フラグメント | Android Developers
フレキシブルな UI のビルド | Android Developers
である。
概要
Fragmentの基本的なメリットと使い方は、
- 画面の処理をActivityに依存しないこと
- 複数のFragmentを1つの画面に表示できること
だと思う。
詳細
具体的な使い方は、
- ActivityのxmlにFrameLayoutを設定する
- FrameLayoutにFragmentをaddする
- 場合によって別の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のとりあえずの使い方をまとめてみた。
これから、より高度なことを勉強したら、また別でまとめる。