FragmentとBottomNavigationViewを利用した切り替えアプリを作ろうとして、Fragmentの仕様に左右されているので、気づいたこと確認したことがあれば適宜まとめていく。Qiitaの書き方の練習も兼ねている。
Fragmentを追加するにあたって
問題:切り替え時にViewが重なる
Fragment継承のクラスをいくつか作って、FragmentTransaction#replace
メソッドを利用して切り替えようとした時起きた問題。replaceでfragmentを入れ替えた時、既存のfragmentと新規のfragmentのviewが重なってしまった。
原因
XMLで記述したfragment(view)にreplaceしていた。どうやら、FragmentTransaction#replace
メソッドはfragmentビューのクラス切り替えをするようなメソッドでは無いらしい。今回は、元々ビューで設定していたfragmentとreplaceした新たなfragmentが重なって見えていたということ。
参考: Fragmentをreplaceしても一つ前のFragmentが残る
解決案
XMLではcontainerとして別のビューを使用。(今回はConstraintLayout)そこにreplaceなどして解決。
Fragment切り替え時
メモ:FragmentTransaction#replace
メソッドで指定したFragmentクラスについて
用意した複数のFragmentクラスに対してそれぞれオブジェクトをひとつずつ生成して使い回していこうと思っていたが、上記のメソッドでオブジェクトを指定した際、毎回Fragment#onCreateView
Fragment#ononViewCreated
メソッドなどが呼び出されるようだ。値の初期化に対して気をつけていきたい。
尚、バックボタンで前のFragmentに戻ったりということは想定していないので、addToBackStack
メソッドは利用していない。もしかしたら、これにより動作が変化するかもしれない。