【发布时间】:2021-12-25 15:39:44
【问题描述】:
我正在尝试从第一个屏幕导航到第二个屏幕,我需要提供一个整数标识符来从第二个屏幕上的 API 加载内容。
我在尝试传递 Int Nav 参数时遇到了这个错误。
java.lang.ClassCastException: java.lang.String 无法转换为 java.lang.Integer
这是我的 NavHost,我使用 /{recipeId} 作为第二个屏幕路线上的占位符。
NavHost(
navController = navController,
startDestination = Screens.RecipesOverviewScreen.route
) {
//1st Screen
composable(route = Screens.RecipesOverviewScreen.route) {
RecipesOverviewScreen(
navController = navController,
onToggleTheme = { app.toggleLightTheme() })
}
//2nd Screen
composable(route = "${Screens.RecipeDetailScreen.route}/{recipeId}")
{
RecipeDetailScreen()
}
然后我在第一个屏幕中调用 navController.navigate(),将 Int 类型的 id 传递到导航路线中。
RecipeList(recipes = listState.recipes,
onClickRecipeCard = { id ->
//insert corresponding Int id into the Nav route
navController.navigate(
route = "${Screens.RecipeDetailScreen.route}/${id}"
)
}
在第二个屏幕的 ViewModel 中,我使用 SavedHandleInstance 检索 nav 参数。
@HiltViewModel
class RecipeViewModel @Inject constructor(
savedStateHandle: SavedStateHandle
) : ViewModel() {
init {
//pass in the key inside get() fxn
savedStateHandle.get<Int>(Constants.PARAM_RECIPE_ID)
?.let { id ->
//perform an API call inside init{} using nav arg id
getRecipe(id = id, token = token)
} ....}
此时,应用程序崩溃了,我得到了上面的 logcat 输出。
请在传递 Int Nav arg 时指出正确的方向。
【问题讨论】:
标签: android android-jetpack-compose jetpack-compose-navigation