Android Navigation如何在第二级片段上添加Navigation Up按钮

时间:2019-10-25 01:12:12

标签: android navigation android-jetpack android-jetpack-navigation

我正在使用导航图托管我的片段。如何从more_menu_help添加后退按钮,以便它可以返回到nav_more?

查看屏幕截图: enter image description here

我尝试执行以下操作,但是,后退箭头图标出现在nav_payments,nav_benefits和nav_more片段中。我只想向more_menu_help添加后退箭头:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)


    val navController = Navigation.findNavController(this, R.id.nav_host_fragment)
    nav_bar.setupWithNavController(navController)

    // Set up ActionBar
    setSupportActionBar(toolbar)
    setupActionBarWithNavController(this, navController, null)

    nav_bar.setupWithNavController(navController)

    supportActionBar?.setDisplayHomeAsUpEnabled(false)
    supportActionBar?.setDisplayShowHomeEnabled(false)
    supportActionBar?.setDisplayShowTitleEnabled(false)

}

查看福利屏幕。向上导航的后退按钮箭头显示在此处,我不需要。 enter image description here

1 个答案:

答案 0 :(得分:0)

按照Navigation UI documentation

  

默认情况下,当用户位于导航图的顶级目标位置时,“导航”按钮处于隐藏状态,而在其他任何目标位置均显示为“向上”按钮。

     

如果要自定义哪些目标被视为顶级目标,则可以将一组目标ID传递给构造函数,如下所示:

val appBarConfiguration = AppBarConfiguration(
    setOf(R.id.nav_home, R.id.nav_payments, R.id.nav_benefits, R.id.nav_more))

然后在调用AppBarConfiguration时传递该setupActionBarWithNavController对象:

setupActionBarWithNavController(navController, appBarConfiguration)

请注意,由于您使用的是ActionBar,因此根据ActionBar section覆盖AppBarConfiguration时,还必须传递相同的onSupportNavigateUp()对象:

override fun onSupportNavigateUp(): Boolean {
  val navController = findNavController(R.id.nav_host_fragment)
  return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}

因此,您应该将AppBarConfiguration对象保留在类级别(而不是onCreate()中的局部变量。