【问题标题】:Jetpack Navigation: how to navigate from child of one nested graph to child from another nested graph?Jetpack Navigation:如何从一个嵌套图的子级导航到另一个嵌套图的子级?
【发布时间】:2021-09-13 11:26:57
【问题描述】:

导航结构:

MainActivity
|- nav_root
   |- HomeFragment
   |- AuthNestedGraph
   |  |- nav_auth
   |  |  |-BeforeOtpFragment(home)
   |  |  |-OtpFragment
   |
   |- ProfileNestedGraph
   |  |- nav_prfole
   |  |  |-ProfileFragmentOne(home)
   |  |  |-ProfileFragmentTwo

我可以从 HomeFragment 导航到 BeforeOtp(nav_auth home)、toProfileOne(nav_profile home)。 我也可以从任何身份验证片段导航到 toProfileOne,或从配置文件片段导航到 BeforeOtp 通过全局 id

但是如何从另一个嵌套图形/导航文件的片段导航到未设置主页的子片段?喜欢 OtpFragment/ProfileTwoFragment。如何更改导航控制器?

尝试全局时出现异常:“无法从当前目的地 Destination 中找到”

我可以通过深层链接做到这一点,但这不是我正在寻找的解决方案。

This project github

【问题讨论】:

    标签: android navigation parent-child android-architecture-navigation android-jetpack-navigation


    【解决方案1】:

    原来答案很简单,但希望它可以帮助某人。

    因此,我们希望从 nav_auth 中的任何 Auth 片段导航到 nav_profile 中的 ProfileTwo。 我们做什么:

    1. 将全局操作添加到 nav_profile 中的配置文件二:
        <action
        android:id="@+id/action_global_profileTwoFragment"
        app:destination="@id/profileTwoFragment"
        app:popUpTo="@id/profileTwoFragment"
        app:popUpToInclusive="true"
        app:launchSingleTop="false" />
    
    1. 在导航功能中,我们找到了 navController。通过导航文件的 id 设置新的 Graph,需要的 Fragment 位于哪里。并通过全局操作进行导航:
        override fun routeToProfileTwoFragment() {
            val navController = fragment.findNavController()
            navController.setGraph(R.navigation.nav_profile)
            navController.navigate(R.id.action_global_profileTwoFragment)
        }
    
    
    1. 因为如果我们想要导航到主导航图(nav_root),我们需要在导航时将其更改回来(同时将全局操作添加到主片段):
        override fun routeMain() {
            val navController = fragment.findNavController()
            navController.setGraph(R.navigation.nav_root)
            navController.navigate(R.id.action_global_home)
        }
    

    Github project was updated

    【讨论】:

      猜你喜欢
      • 2020-10-22
      • 2020-04-05
      • 2021-09-02
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多