我使用Navigation(使用Jetpack Compose(创建了一条道路,因此
composable(CatLifeScreen.AddCatFormScreen.route + "?catId={catId}",
arguments = listOf(
navArgument(name = "catId") {
nullable = true
}
)) {
bottomBarState.value = false
val catId = it.arguments?.getInt("catId")
AddEditCatFormBody(
idOfCat = catId,
navController = navController,
addEditCatViewModel = addEditCatViewModel,
)
如果我不补充任何论点,这条路运行良好
onClick = { navController.navigate(CatLifeScreen.AddCatFormScreen.route) }
如果我定义一个论点,它。论点?。当我传递的参数不为0时,getInt("catId"(为0。
IconButton(onClick = { navController.navigate(CatLifeScreen.AddCatFormScreen.route + "?catId=$idOfCat") } //idOfCat = 1
有人有线索可循吗?我已经被卡住很长时间了
终于找到了答案。对于任何像我一样被困的人:
-
输入要接收的数据类型
-
整数值不能为null(如果这样做,应用程序将崩溃(。(参见文档https://developer.android.com/guide/navigation/navigation-pass-data#supported_argument_types(。在我的情况下,我没有指定类型
-
使用getString(key(获取参数中的key,并将其强制转换为Int(仅当您不指定类型,因为您希望它可以为null。您可能可以用不同的方式处理它(比如当您没有要传递的值而不是null时使用-1(
composable(CatLifeScreen.AddCatFormScreen.route + "?catId={catId}", arguments = listOf( navArgument(name = "catId") { nullable = true // I don't specify the type because Integer can't be nullable } )) { bottomBarState.value = false val catId = it.arguments?.getString("catId")?.toInt() // Fetch key using getString() and cast it AddEditCatFormBody( idOfCat = catId, navController = navController, addEditCatViewModel = addEditCatViewModel, ) }
尝试键入参数类型,如下所示;
arguments = listOf(
navArgument("catId") {
type = NavType.IntType
nullable = true
}
)