繁体   English   中英

如何在 Jetpack Compose 中从一个 NavHost 向上导航到另一个?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM