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 找到”
我可以通过深层链接做到这一点,但这不是我正在寻找的解决方案。
原来答案很简单,但希望它能帮助到别人。
因此,我们希望从 nav_auth 的任何 Auth 片段导航到 nav_profile 的 ProfileTwo。
我们做什么:
- 在 nav_profile 中向配置文件二添加全局操作:
<action
android:id="@+id/action_global_profileTwoFragment"
app:destination="@id/profileTwoFragment"
app:popUpTo="@id/profileTwoFragment"
app:popUpToInclusive="true"
app:launchSingleTop="false" />
- 在导航函数中我们找到了navController。通过导航文件的 id 设置新的图形,所需的片段位于何处。并通过全局操作导航:
override fun routeToProfileTwoFragment() {
val navController = fragment.findNavController()
navController.setGraph(R.navigation.nav_profile)
navController.navigate(R.id.action_global_profileTwoFragment)
}
- 因为如果我们想导航到主导航图(nav_root),我们需要在导航时将它改回来(还要向主页片段添加全局操作):
override fun routeMain() {
val navController = fragment.findNavController()
navController.setGraph(R.navigation.nav_root)
navController.navigate(R.id.action_global_home)
}
导航结构:
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 找到”
我可以通过深层链接做到这一点,但这不是我正在寻找的解决方案。
原来答案很简单,但希望它能帮助到别人。
因此,我们希望从 nav_auth 的任何 Auth 片段导航到 nav_profile 的 ProfileTwo。 我们做什么:
- 在 nav_profile 中向配置文件二添加全局操作:
<action
android:id="@+id/action_global_profileTwoFragment"
app:destination="@id/profileTwoFragment"
app:popUpTo="@id/profileTwoFragment"
app:popUpToInclusive="true"
app:launchSingleTop="false" />
- 在导航函数中我们找到了navController。通过导航文件的 id 设置新的图形,所需的片段位于何处。并通过全局操作导航:
override fun routeToProfileTwoFragment() {
val navController = fragment.findNavController()
navController.setGraph(R.navigation.nav_profile)
navController.navigate(R.id.action_global_profileTwoFragment)
}
- 因为如果我们想导航到主导航图(nav_root),我们需要在导航时将它改回来(还要向主页片段添加全局操作):
override fun routeMain() {
val navController = fragment.findNavController()
navController.setGraph(R.navigation.nav_root)
navController.navigate(R.id.action_global_home)
}