Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用Jetpack Compose导航处理弹出多个屏幕_Android_Android Jetpack Compose_Android Jetpack Navigation - Fatal编程技术网

Android 如何使用Jetpack Compose导航处理弹出多个屏幕

Android 如何使用Jetpack Compose导航处理弹出多个屏幕,android,android-jetpack-compose,android-jetpack-navigation,Android,Android Jetpack Compose,Android Jetpack Navigation,我将尝试做一些ASCII艺术来描述这个问题: <--------------------------------------\ DestinationA --> DestinationC ---------> DestinationE DestinationB ------/ \-----> DestinationD --/ NavHost当前的用途是: val navController=rememberNavController() 导航主机(n

我将尝试做一些ASCII艺术来描述这个问题:

       <--------------------------------------\
DestinationA --> DestinationC ---------> DestinationE
DestinationB ------/    \-----> DestinationD --/
NavHost当前的用途是:

val navController=rememberNavController()
导航主机(navController=navController,startDestination=“DestinationA”){
撰写(“目的地”){
ScreenA(hiltNavGraphViewModel(it))
}
撰写(“目的地B”){
屏幕B(hiltNavGraphViewModel(it))
}
组合(“DestinationC/{id}”,参数=listOf(navArgument(“id”){type=NavType.StringType})){
val viewModel=hiltNavGraphViewModel(it)
val id=it.arguments?.getString(“id”)
viewModel.setId(id)
ScreenC(视图模型)
}
组合(“DestinationD/{id}”,参数=listOf(navArgument(“id”){type=NavType.StringType})){
val viewModel=hiltNavGraphViewModel(it)
val id=it.arguments?.getString(“id”)
viewModel.setId(id)
ScreenD(视图模型)
}
组合(“DestinationE/{id}”,参数=listOf(navArgument(“id”){type=NavType.StringType})){
val viewModel=hiltNavGraphViewModel(it)
val id=it.arguments?.getString(“id”)
viewModel.setId(id)
屏幕(视图模型)
}
}

使用嵌套的导航图在不同的导航上创建
DestinationC
destinationone

val navController = rememberNavController()
NavHost(navController = navController, startDestination = "DestinationA") {
    compose("DestinationA") {
        ScreenA(hiltNavGraphViewModel(it))
    }
    compose("DestinationB") {
        ScreenB(hiltNavGraphViewModel(it))
    }
    navigation("DestinationC".plus("/{id}"), "DestinationC".plus("_Route")) {
      compose("DestinationC/{id}", arguments = listOf(navArgument("id") { type = NavType.StringType })) {
          val viewModel = hiltNavGraphViewModel(it)
          val id = it.arguments?.getString("id")
          viewModel.setId(id)
          ScreenC(ViewModel)
      }
    }
    compose("DestinationD/{id}", arguments = listOf(navArgument("id") { type = NavType.StringType })) {
        val viewModel = hiltNavGraphViewModel(it)
        val id = it.arguments?.getString("id")
        viewModel.setId(id)
        ScreenD(viewModel)
    }
    navigation("DestinationE".plus("/{id}"), "DestinationE".plus("_Route")) {
      compose("DestinationE/{id}", arguments = listOf(navArgument("id") { type = NavType.StringType })) {
          val viewModel = hiltNavGraphViewModel(it)
          val id = it.arguments?.getString("id")
          viewModel.setId(id)
          ScreenE(ViewModel)
      }
   }
}
例如,您希望从C移动到E,并弹出到A

navController.navigate("DestinationE".plus("/${data.id}")) {
                        popUpTo("DestinationA") {
                            inclusive = false
                        }
                    }

DestinationA
DestinationB
应该是两个不同的
startDestination
?如果是的话,那么在导航、标签或其他方面使用了什么组件?我承认我对导航的理解不是很深入。也许
DestinationA
DestinationB
应该不同
startDestination
,但它们不是。我有一个平面的
NavHost
,其中包含所有目的地,
DestinationA
startdestation
。我用的是导航抽屉。这是否改变了我应该如何设计导航?如果是,怎么做?谢谢。你可以发布你当前的导航图吗?SS也会帮助你。
DestinationA
DestinationB
属于哪里?它们是抽屉的方向项目吗?是的,DestinationA和DestinationB是抽屉中的顶级目的地。导航图完全没有意思。我将编辑这个问题,使其格式合理。你能解释一下吗?导航代码会是什么样子?@Sean我已经介绍了如何从DestinationOne导航,我想跳回A或B,以堆栈上的哪个为准。我不想在导航到DestinationOne时将DestinationC从堆栈中弹出,因为您应该仍然能够从E导航回C。Popup到DestinationA它将跳过DestinationA如果DestinationA不在Backback上怎么办?这不能保证。这就是我的观点。