android - 当我导航到新目的地时如何禁用向上按钮
问题描述
我尝试在导航到新目的地时禁用向上按钮,并将此目的地设为新的起始目的地。
// navigation.xml
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/navigation"
app:startDestination="@id/firstFragment">
<fragment
android:id="@+id/firstFragment"
android:name="com.example.myproject.FirstFragment"
android:label="FirstFragment" >
<action
android:id="@+id/action_firstFragment_to_secondFragment"
app:destination="@id/secondFragment"
app:popUpTo="@id/firstFragment"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.example.myoroject.SecondFragment"
android:label="fragment_second"
tools:layout="@layout/fragment_second" />
</navigation>
但是当我导航到 secondFragment 时,TopLeft 中的后退按钮总是在这里并且不会消失。
更新
我的主要活动如下所示。
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var navController: NavController
private lateinit var drawerLayout: DrawerLayout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
drawerLayout = binding.drawerLayout
navController = this.findNavController(R.id.myNavHostFragment)
navController.addOnDestinationChangedListener { _, destination, _ ->
if(destination.id == R.id.firstFragment) {
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_CLOSED)
} else {
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
}
}
NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout)
NavigationUI.setupWithNavController(binding.navView, navController)
}
override fun onSupportNavigateUp(): Boolean {
return NavigationUI.navigateUp(navController, drawerLayout)
}
}
顺便说一句,我想禁用 firstFragment 中的抽屉切换按钮,它似乎也不起作用。
解决方案
您可以查看文档:
顶级目的地不会在顶部应用栏中显示向上按钮,因为没有更高级别的目的地。
当用户在任何其他目的地时,导航按钮显示为向上按钮。要配置仅使用起始目的地作为顶级目的地的导航按钮,请创建一个AppBarConfiguration
对象
如果您想自定义哪些目的地被视为顶级目的地,您可以将一组目的地 ID 传递给构造函数,例如:
val appBarConfiguration = AppBarConfiguration(setOf(R.id.firstFragment, R.id.secondFragment))
setupActionBarWithNavController(navigationController, appBarConfiguration)
关于DrawerLayout
.
如果目的地不使用 a DrawerLayout
,导航按钮将被隐藏。
推荐阅读
- android - Kotlin,Android - 我如何在可运行文件中发布相同的可运行文件?
- python - 显示连续出现次数最多的数字
- javascript - 在 mocha post 函数上为 %s 赋值
- python - 使用返回值导入模块
- php - curl 不工作但也没有给出任何错误
- c# - 使用 C# 实现 Java 自动化的 WindowsAccessBridge
- python - 使用 Python 将字符串列合并到一组列表
- amazon-web-services - kops - 得到错误的 kubectl 上下文
- android - 检测用户不活动并显示密码屏幕
- android - FirebaseRecyclerAdapter 适用于 API 21 但不适用于 oreo 或牛轧糖