[英]How to navigate up from one NavHost to another in Jetpack Compose?
所以我有包含 HomeScreen 的根导航图,它本身就是一个导航图,它有自己的 NavHostController,因为在 HomeScreen 中我使用底部导航栏。
这是 RootNavGraph
@Composable
fun RootNavigationGraph (navController: NavHostController){
NavHost(
navController = navController,
route = "root_graph",
startDestination = Screen.Welcome.route
){
composable(route = Screen.Welcome.route){
WelcomeScreen(navController = navController)
}
composable(route = Screen.Start.route){
StartScreen(navController = navController)
}
composable(
route = Screen.Home.route
){
HomeScreen()
}
}
}
这里 HomeScreen() 是底部导航:
@Composable
fun HomeScreen(navController : NavHostController = rememberNavController()){
Scaffold(
bottomBar = { TabBar(navHostController = navController) }
) { innerPadding ->
Box(
modifier = Modifier.padding(innerPadding)
){
HomeNavGraph(navController = navController)
}
}
}
如您所见,它包含另一个 NavHostController,因为 HomeNavGraph 包含 NavHost。
现在在这个 NavHost 中我有可组合的,在某些时候我想从中导航到 RootNavigationGraph 的 Screen.start.route 但找不到解决这个问题的方法。
如果我尝试简单地启动 go(我也想从后台弹出所有内容):
navController.navigate(Screen.Start.route)
{
popUpTo(Screen.Start.route){
inclusive = true
}
}
它给我错误:
java.lang.IllegalArgumentException:在导航图中找不到与请求 NavDeepLinkRequest{ uri=android-app://androidx.navigation/root_graph } 匹配的导航目的地 NavGraph(0x442b361f) route=home_screen startDestination={Destination(0x78cb4ec6) route=主要的}
您在应用程序中有两个不同的 navControllers。 一个在 RootNavigationGraph 中,一个在 HomeScreen 中。 HomeScreen 将 navController 定义为参数,但未传递。
因为您没有将 navController 传递给 HomeScreen,所以创建了一个新的 navController。 这个人对 RootNavigationGraph 中定义的路由一无所知
您应该将 navController 从 RootNavigationGraph 传递到 HomeScreen。 这可能会解决这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.