【Android】Fragment同士の遷移とActivityへの通知の実装メモ
今の仕事で作っているAndroidアプリのUIは基本的に
機能毎にActivityを作って、その上にFragmentをAttachしている。
で、その機能の範囲内で画面遷移する時はFragmentを切り替える設計になっているわけだが、
その辺りを実現するためにFragmentを操作するライブラリをベースに独自クラスと拡張関数を作っている。
ただ、自分自身はActivity・Fragment制御の根本的な仕組みを理解している訳ではなかったので、
試しにライブラリを使わずにFragment同士の遷移を書いてみた。
やったこと
- 初期表示でFragmentをActivityにAttach
- Fragment同士の遷移
- Fragmentの遷移をActivityに通知
初期表示でFragmentをActivityにAttach
参考にした記事: [Android] Activity と Fragment の画面遷移
上記記事のサンプルではActivityを初期表示にボタンクリックでFragmentを表示する実装になっているが、
UIの表示ロジックはFragmentに書いて、ActivityにはToolbarのロジックなどを書く様にしたかったので、
最初からFragmentをAttachする実装にした。
具体的なコードはこんな感じ。
feat:ActivityにFragmentをAttach · syo-sa1982/ToDo4Android@b2721b7 · GitHub
因みにDataBinding使いたかったので、UIの表示方法は元の記事と若干違う。
それと、あとから気がついたけどタイポが混じっている。(誤: frammentTransaction
正: fragmentTransaction
)
Fragment同士の遷移
参考にした記事:[Android] Fragment から別の Fragment に画面遷移させてみる
次はFragmentから別のFragmentへの遷移。
尚、次のFragmentに遷移してから前のFragmentに「遷移し直す」ケースは全く想定していなくて、
前のFragment(というか画面?)に「戻る」実装しかしていない。
- 別のFragmentに遷移:feat:TopFragment→SubFragmentへの遷移サンプルを実装 · syo-sa1982/ToDo4Android@e104c37 · GitHub
- 前のFragmentに戻る:feat:SubFragmentからTopFragmentへ戻る遷移サンプルを実装 · syo-sa1982/ToDo4Android@9f6fc59 · GitHub
ここまでで画面の見た目としては下記のようになっている。
遷移前 | 遷移後 |
---|---|
Fragmentの遷移をActivityに通知
参考にした記事: FragmentからActivityにコールバックする方法2017 - Qiita
ここまでToolbar(画面スクショでいうと、ヘッダーみたいな部分)には特に何も表示させていなかったが、
表示しているFragmentによってToolbarに表示させる内容を切り替えたい。
が、Toolbar自体はActivityで持っている為、FragmentのAttachや遷移をActivityに通知する必要がある。
なので、以下のような方法を取った。
- AppCompatActivity/FragmentのBaseクラス(BaseActivity/BaseFragment)を作る
- BaseFragmentには遷移を通知するinterfaceを定義
- BaseActivityには前述のinterfaceをimplementして、Toolbarを書き換える処理を実装
具体的にはこんなコードになる
feat:Toolbarの表示をFragmentの遷移にあわせる · syo-sa1982/ToDo4Android@f1ac9aa · GitHub
見た目はこうなる
遷移前 | 遷移後 |
---|---|
最後に
ここまで実務で使っているライブラリを使わずになるべく最小限のクラスで実装してみたものの、
RequestCodeを送るケースや遷移のアニメーションを指定するケースなどが有るので、
Fragmentの遷移制御を担う独自クラスを作って拡張関数を作る必要はやはり出てくるなと感じた。
気が向いたら、次回以降リファクタリングしたコードを書くか、この記事に追記するなどしてみる。