Android 导航组件 : Start at a different destination than home, 以编程方式?

标签 android android-architecture-navigation android-jetpack-navigation

我正在尝试根据 github examples 实现具有多个返回堆栈 BottomNavigationView 的多个 navigation controller .但是,该示例为每个选项卡使用不同的导航图,这使事情变得简单。在我的例子中,我需要为我的所有选项卡使用相同的导航图,但具有不同的起始目的地,而不是导航图中设置的“home destination”。

到目前为止,我已经设法修改了 NavigationExtensions 文件,以便为所有选项卡实现单个导航图,并且我得到了多个具有自己的返回堆栈的 navControllers,但我不知道如何在不同的目的地启动导航图。

我尝试在获取导航 Controller 时使用 .navigate,但由于它尚未附加,因此无法正常工作。关于如何实现这一目标的任何想法?谢谢。

最佳答案

我们有一个要求,其中显示的开始屏幕取决于用户是否已登录,我们所做的如下:

  1. 在导航中删除 app:startDestination XML如果存在
  2. 在您的主要 Activity 的 XML 中,删除 <fragment> 中的以下字段标签:app:defaultNavHost="true"app:navGraph
  3. 关于我们的主要 Activity onCreate() , 我们创建一个 NavGraph对象:

    NavController navController = Navigation.findNavController(this, R.id.your_nav_hostfragment);    
    NavGraph navGraph = navController.getNavInflater().inflate(R.navigation.your_navigation_xml);
    
  4. 然后根据您的要求,您可以使用 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/

相关文章:

android - RxJava返回错误为onNext并继续流

Android 导航组件在通过 NavigationDrawer 导航时有延迟

java - 如何打开关闭应用程序后打开的最后一个 fragment 并使用抽屉导航和导航组件重新打开它

android - 如何在导航组件中打开 fragment 的多个实例?

android - IllegalArgumentException : navigation destination xxx is unknown to this NavController

Android Start Activity for Result 返回不同的 resultCode

Android 模拟器未与我的 React Native 应用程序一起运行

android - 如何模拟android传感器事件?

android - 在导航表单选项菜单项时导航到嵌套图时如何返回用户离开的位置?

android-jetpack-compose - 使用 Dialog 作为带有 jetpack compose 的导航目的地