2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AAC NavigationでToolbarに `←` ボタンを付けたい/付けたくない時

Last updated at Posted at 2019-09-25

簡単な説明

個人的備忘録メモです。
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に戻させたくないときはこうすると仕様を満たせます。
もっと良いやり方見つけたらまた別記事で書くかも…

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?