首页 > 解决方案 > Android导航如何在第二级片段上添加导航向上按钮

问题描述

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

看截图: 在此处输入图像描述

我尝试执行以下操作,但是,后退箭头图标出现在 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)

}

查看福利屏幕。导航向上返回按钮箭头显示在这里,这是我不想要的。 在此处输入图像描述

标签: androidnavigationandroid-jetpackandroid-jetpack-navigation

解决方案


根据导航 UI 文档

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

如果要自定义哪些目的地被视为顶级目的地,则可以改为将一组目的地 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 部分AppBarConfiguration进行覆盖时还必须传递相同的对象:onSupportNavigateUp()

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

因此,您应该将AppBarConfiguration对象保持在类级别(而不是onCreate().


推荐阅读