使用两个导航图处理 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 以获得相同的行为。
我创建了一个小示例应用程序来测试 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 以获得相同的行为。