Jetpack 导航:如何从一个嵌套图的子图导航到另一个嵌套图的子图?

Jetpack Navigation: how to navigate from child of one nested graph to child from another nested graph?

导航结构:

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

我可以从 HomeFragment 导航到 BeforeOtp(nav_auth home),再到 ProfileOne(nav_profile home)。 我也可以通过全局 id

从任何 auth 片段导航到 toProfileOne,或从配置文件片段导航到 BeforeOtp

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

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

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

This project github

原来答案很简单,但希望它能帮助到别人。

因此,我们希望从 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 设置新的图形,所需的片段位于何处。并通过全局操作导航:
    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