我需要第二个活动和一个导航图,并且在工具栏中有一个返回按钮,第一个活动也包含一个导航图
在第二个活动中,如果出现后退箭头按钮,但在活动编号中,则输入片段时,我具有onSupportNavigateUp和setupActionBarWithNavController。
尝试在活动和片段中添加setHomeButtonEnabled和setDisplayHomeAsUpEnabled,如果按钮向后显示,但是当我在前面输入一些片段并返回片段时,startDestination会消失按钮向后
我只需要将按钮保留在活动中并解决我的问题
答案 0 :(得分:1)
您不能,活动有其自己的工具栏,在您的情况下,它们有两个不同的NavControllers。因此,您的第二个活动将为其片段管理NavUp Button,并且当目标片段开始时,NavUpButton(Backbutton)消失了,因为它没有剩余的目的地。而且,如果您以编程方式在第二个活动的开始目标上显示NavUp Button并管理onClick并启动第一个活动,该活动始终转到第一个活动片段的“开始”目标,因为它具有自己的导航控制器。
问题是导航UI不能那样工作。更好的方法是只使用一个活动并包含多个片段。并使用其他任何方法在同一导航控制器中解决您的问题。
答案 1 :(得分:0)
添加 setHomeButtonEnabled 函数。去你的回归行动。如果您要返回带有按钮的按钮,请将其添加到onClick或带有backPress,请覆盖backPress。
此解决方案:当您尝试返回startDestination时,将设置按钮启用。
答案 2 :(得分:0)
您可以通过指定setFallbackOnNavigateUpListener来实现:
private fun setupToolbar() {
val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration =
AppBarConfiguration.Builder()
.setFallbackOnNavigateUpListener { onNavigateUp() }
.build()
dataBinding.toolbar.apply {
setupWithNavController(navController, appBarConfiguration)
}
}
然后在“活动”中执行任何操作:
override fun onNavigateUp(): Boolean {
finish()
return true
}
答案 3 :(得分:0)
我创建了一个界面来显示/隐藏导航主机活动中的按钮。以下是活动如何实现显示/隐藏按钮的接口方法的方法:
override fun showUpButton() {
val navController = this.findNavController(R.id.nav_host)
val listener = AppBarConfiguration.OnNavigateUpListener { navController.navigateUp() }
val abc = AppBarConfiguration.Builder().setFallbackOnNavigateUpListener(listener).build()
NavigationUI.setupActionBarWithNavController(this, navController, abc)
}
override fun hideUpButton() {
val navController = this.findNavController(R.id.nav_host)
NavigationUI.setupActionBarWithNavController(this, navController)
}
按下向上按钮时,在活动中显示方法:
override fun onSupportNavigateUp(): Boolean {
val navController = this.findNavController(R.id.nav_host)
if(!navController.navigateUp()){ // When in start destination
onBackPressed()
}
return navController.navigateUp()
}
在片段中,只要按下后退按钮(NOT UP按钮)就可以收听:
private fun setupBackPress() {
requireActivity()
.onBackPressedDispatcher
.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
}
})
}