我正在尝试从第一个屏幕导航到第二个屏幕,我需要提供一个整数标识符来从第二个屏幕上的 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()
第一个屏幕,将id
Int 类型的类型传入导航路线。
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 时指出我正确的方向。