使用两个导航图处理 Android 导航的后退按钮

Handling back button with Android Navigation with two navigation graphs

我创建了一个小示例应用程序来测试 android 导航库。一般的想法是我想要两个带有自己的导航图的选项卡。

我的主要 activity 布局包含一个 BottomNavigationView 和两个 NavHost

ButtonNavigationView 点击侦听器负责显示一个 NavHost 或另一个,并使用选定的控制器调用 NavigationUI.setupActionBarWithNavController 以相应地更新工具栏。向上导航工作正常。

我现在面临的问题是后退按钮。

有一个 属性 app:defaultNavHost="true" 可确保您的 NavHostFragment 拦截系统后退按钮,但我希​​望它是 on/off,具体取决于活动图。我找不到改变它的方法:(

我知道我可以覆盖 onBackPressed() 但我正在尝试为图书馆找到一种方法来为我完成这项工作,让它知道哪个图是活动的。

根据 NavHostFragment source, all that app:defaultNavHost="true" does is call through to setPrimaryNavigationFragment(),这就是 FragmentManager 知道将按钮事件发送回哪个子 Fragment 的方式。

因此,当切换到新的 Fragment 时,您可以将 setPrimaryNavigationFragment() 添加到 FragmentTransaction 以获得相同的行为。