导航结构:
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)。
我还可以通过全局 id 从任何 auth 片段导航到 toProfileOne,或从配置文件片段导航到 BeforeOtp
但是如何导航到另一个嵌套图形/导航文件中未从片段设置为 home 的子片段?类似于 Otp Fragment/ProfileTwo Fragment。如何更改导航控制器?
尝试全局时出现异常:“无法从当前目的地找到”
我可以通过深层链接来做到这一点,但这不是我正在寻找的解决方案。
本项目github https://github.com/veygard/JetpackChildNav
原来答案很简单,但希望它可以帮助别人。
因此,我们希望从 nav_auth 的任何 Auth 片段导航到 nav_profile 的 ProfileTwo。
我们所做的:
- Add global action to Profile Two in 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)
}
Github项目已更新 https://github.com/veygard/JetpackChildNav
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)