我的Activity
的布局中有一个NavHostFragment
和一个BottomNavigationView
。 NavHostFragment
有一个main_navigation_graph
,其中包含四个Fragments
。它们的ids
与BottomNavigationView#menu
匹配,因此Navigation
可以在我呼叫
activity_main_bottom_navigation.setupWithNavController(navController)
到目前为止一切正常。 我的问题是,当选择了另一个标签(在BottomBar中)时,后退按钮将转到开始目标。
我知道这是预期的行为(至少根据NavigationUI.onNavDestinationSelected
文档):
...
默认情况下,后退堆栈将弹出回到导航图的起始目标位置。 带有
android:menuCategory="secondary"
的菜单项不会弹出堆栈。
但这不是我想要的。
我想要
如果用户位于选项卡的“根目录”(来自BottomNavigation),并且并且用户按了后退->关闭
App
(完成Activity
)
我该如何实现?
此gif演示了当前的实现:
在 Szenen 标签上,按 back 后,我要关闭Activity
。而是转到startDestination
(这是系统标签)。
答案 0 :(得分:0)
setupWithNavController
跟在Principles of Navigation之后。如果您想偏离导航原理,则需要为自己的OnNavigationItemSelectedListener
编写自己的BottomNavigationView
,以实现所需的功能。
答案 1 :(得分:0)
从 startDestination (应用程序中的系统)导航到要关闭应用程序的另一个片段(应用程序中的快照)。 只需将以下两行用于startDestination的操作添加到导航图中的另一个片段即可。
app:popUpTo="@id/homeFragment"
app:popUpToInclusive="true"
对我有用。
注意: 如果要从其他片段而不是startDestination关闭应用程序
答案 2 :(得分:0)
override fun onNavigationItemSelected(item: MenuItem): Boolean {
if (item.itemId != host.navController.currentDestination?.id) {
host.navController.navigate(
item.itemId, null,
NavOptions.Builder().setPopUpTo(R.id.nav_graph_main, false).build()
)
}
return true
}
正在使用中:
binding.bottomBar.setOnNavigationItemSelectedListener(this)