1

我的布局中Activity有一个NavHostFragment和一个BottomNavigationView。有NavHostFragment一个main_navigation_graph其中包含四个Fragments。他们ids匹配,BottomNavigationView#menu以便Navigation当我打电话时可以自己处理所有的东西

activity_main_bottom_navigation.setupWithNavController(navController)

到目前为止一切正常。My problem is that the back button will go to the start destination when another tab (in the BottomBar) was selected.

我知道这是预期的行为(至少根据NavigationUI.onNavDestinationSelected文档):

...

默认情况下,返回堆栈将弹出回导航图的起始目的地。有的菜单项android:menuCategory="secondary"不会弹出回栈。

但这不是我想要的。

我想要这样的行为

如果用户位于选项卡的“根”(来自 BottomNavigation)并且用户按回 -> 关闭App(完成Activity)。

我怎样才能做到这一点?

这个 gif 演示了当前的实现:

当我在Szenen选项卡并按下返回时,我想关闭Activity. 相反,它转到startDestination(这是系统选项卡)。

4

3 回答 3

1

setupWithNavController遵循导航原则。如果你想偏离导航原则,你需要为你自己写OnNavigationItemSelectedListenerBottomNavigationView想要的。

于 2019-08-01T17:18:46.650 回答
0

在从startDestination(您的应用程序中的系统)导航到另一个片段(您的应用程序中的喷嚏)的操作中,您要关闭应用程序。只需将以下两行在 startDestination 的操作中添加到导航图中的另一个片段。

app:popUpTo="@id/homeFragment"
app:popUpToInclusive="true"

它对我有用。

注意: 如果您想从其他片段而不是 startDestination 关闭应用程序

于 2020-11-19T11:13:46.360 回答
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)
于 2021-07-07T10:11:36.610 回答