我正在尝试根据 github examples 实现具有多个返回堆栈 BottomNavigationView
的多个 navigation controller
.但是,该示例为每个选项卡使用不同的导航图,这使事情变得简单。在我的例子中,我需要为我的所有选项卡使用相同的导航图,但具有不同的起始目的地,而不是导航图中设置的“home destination”。
到目前为止,我已经设法修改了 NavigationExtensions
文件,以便为所有选项卡实现单个导航图,并且我得到了多个具有自己的返回堆栈的 navControllers
,但我不知道如何在不同的目的地启动导航图。
我尝试在获取导航 Controller 时使用 .navigate
,但由于它尚未附加,因此无法正常工作。关于如何实现这一目标的任何想法?谢谢。
最佳答案
我们有一个要求,其中显示的开始屏幕取决于用户是否已登录,我们所做的如下:
- 在导航中删除 app:startDestination
XML
如果存在 - 在您的主要 Activity 的 XML 中,删除
<fragment>
中的以下字段标签:app:defaultNavHost="true"
和app:navGraph
关于我们的主要 Activity
onCreate()
, 我们创建一个NavGraph
对象:NavController navController = Navigation.findNavController(this, R.id.your_nav_hostfragment); NavGraph navGraph = navController.getNavInflater().inflate(R.navigation.your_navigation_xml);
然后根据您的要求,您可以使用 setStartDestination 在 NavGraph 上设置起始目的地,然后将 NavGraph 应用到 NavController:
if (condition) { navGraph.setStartDestination(R.id.screen1); } else { navGraph.setStartDestination(R.id.screen2); } navController.setGraph(navGraph);
关于Android 导航组件 : Start at a different destination than home, 以编程方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56768375/