android - 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)
}
解决方案
根据导航 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()
.
推荐阅读
- c++ - 在 C++ 中,有没有办法在不发生移动或复制的情况下将值传递给构造函数?
- html - 如何删除我的网站的左白边框颜色
- python - {} 和 format 在这个命令 python 中做了什么?
- java - 使用 switch 语句在 Java 中解耦的问题
- php - DigitalOcean Spaces:无法将文件设置为公开
- r - R中列的条件总和
- python - Kivy:相机不尊重 pos_hint(但尊重 size_hint)
- sql-server - 有人可以解释这个 DROP TABLE 命令吗?我错过了什么?
- c++ - std::initializer_list 作为模板类中的构造函数参数
- python-3.x - 当所有线程都属于同一个类时,线程可以共享公共数据元素吗?