Dr.*_*dRO 10 android android-jetpack-compose jetpack-compose-navigation
我已经尝试了所有可能的方法,看起来没有找到解决方案。
我正在使用带有撰写屏幕的全撰写应用程序,并使用撰写导航在此屏幕之间导航,我有一个场景,我以这种方式进一步导航
屏幕 A > 屏幕 B1 >..> 屏幕 BN > 屏幕 C
现在,在完成屏幕 C 上的功能后,我想弹回屏幕 A,但这次带有一个可选参数,例如:成功
我这样做是为了导航到 A:
val route = "ScreenA?arg={arg}"
// navigating like this
navController.navigate("ScreenA")
// handling
composable(route, arguments = listOf(navArgument("arg") { nullable = true })){
ScreenA()
}
Run Code Online (Sandbox Code Playgroud)
现在,为了从我所在的位置弹回到 ScreenA,我已经这样做了:
navController.popBackStack(
route = route,
inclusive = false
)
Run Code Online (Sandbox Code Playgroud)
我现在想在返回时发送参数。我尝试将路线添加为
ScreenA?arg=success
Run Code Online (Sandbox Code Playgroud)
这在 popBackStack 函数中不起作用,它检查路由的哈希码
popBackStack(createRoute(route).hashCode(), inclusive, saveState)
Run Code Online (Sandbox Code Playgroud)
在这种情况下我的导航失败
我也尝试过将参数设置为后退堆栈条目,但由于它可能是中间的 N Screen,因此无法工作。需要了解我哪里做错了或者是否有办法做到这一点?
尝试将值设置为 previousBackStackEntry 像
navController.previousBackStackEntry?.savedStateHandle?.set(
"resultStatus",
true
)
Run Code Online (Sandbox Code Playgroud)
从第二个屏幕和第一个屏幕(即 ScreenA)中添加
val noResultData =
backStackEntry.savedStateHandle.getLiveData<Boolean>("resultStatus")
.observeAsState(false)
Run Code Online (Sandbox Code Playgroud)
在 composable(route){ backStackEntry -> } 内。这可能会解决您的问题。
使用后,您可以像这样删除它
backStackEntry.savedStateHandle.remove<Boolean>("resultStatus")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5462 次 |
| 最近记录: |