簡単な説明
個人的備忘録メモです。
NavigationはToolbarの設定をサポートしており、NavGraghに設定したラベルを自動的に読んでタイトルに設定することができます。
NavigationでToolbarを設定した際、いわゆる戻る(←
)ボタンは基本的に初めに表示するFragment(StartDestination)では表示されず、それ以外のDestinationでのみ表示されるようになります。
アプリ全体の統一感や、仕様として戻らせたくない場合のためにはそこをいじる必要性が出てくることもあります。
その解決として簡単な方法は、StartDestinationと判定するFragmentのリストをAppBarConfigurationに設定して渡してやることです。
最初のFragmentから ←
をToolbarに出したい時
binding.toolbar.setupWithNavController(
navController = findNavController(R.id.nav_host_fragment),
configuration = AppBarConfiguration.Builder(setOf<Int>())
.setFallbackOnNavigateUpListener { consume { onBackPressed() } }
.build()
)
StartDestinationのSetを空Setで渡しています。ボタンを押した際の挙動も渡してやります。
全てのFragmentで ←
をToolbarに出したくない時
val navController = findNavController(R.id.nav_host_fragment)
val idSet = setOf<Int>()
navController.graph.iterator().forEach { idSet.add(it.id) }
binding.toolbar.setupWithNavController(
navController = navController,
configuration = AppBarConfiguration.Builder(idSet)
.build()
)
NavGraghに設定されてるFragmentのidを全てSetに入れて渡し、リスナーのセットは行いません。
何かしらの理由で前のFragmentに戻させたくないときはこうすると仕様を満たせます。
もっと良いやり方見つけたらまた別記事で書くかも…