【发布时间】:2022-04-07 16:14:23
【问题描述】:
我有一个如下所示的 NavGraph:
@Composable
fun NavGraph (
navController: NavHostController
) {
NavHost(
navController = navController,
startDestination = "Products"
) {
composable(
route = "Products"
) {
ProductsScreen(
navController = navController
)
}
composable(
route = "Product Details",
arguments = listOf(
navArgument("product") {
type = NavType.SerializableType(Product::class.java)
}
)
) {
val product = navController.previousBackStackEntry?.arguments?.getSerializable("product") as Product
ProductDetailsScreen(
navController = navController,
product = product
)
}
}
}
在 ProductDetailsScreen 中,我希望单击产品以进一步导航到传递产品对象的详细信息屏幕:
LazyColumn {
items(
items = products
) { product ->
ProductCard(
product = product,
onProductClick = {
navController.currentBackStackEntry?.arguments?.putSerializable("product", product)
navController.navigate("Product Details")
}
)
}
}
产品完美显示,但当我点击产品时,应用程序因以下错误而崩溃:
java.lang.IllegalArgumentException:在导航图中找不到与请求 NavDeepLinkRequest{ uri=android-app://androidx.navigation/Product Details } 匹配的导航目的地 NavGraph(0x0) startDestination={Destination(0xb543811) route =产品}
谁能帮忙?
附:我也关注了这个answer,但没有运气:(
【问题讨论】:
-
您可以删除空间。例如更改“产品详细信息”->“产品详细信息”
-
@Alexander 感谢您的评论。我刚做了,没用。我什至删除了整个第二个单词 (Details) + 以及空格,并且行为相同。还有其他想法吗?
-
当然)只需删除所有参数并打开一个空屏幕。比如“产品”。如果可行,您可以添加一个参数
-
@Alexander 是的,如果我删除它们,我可以打开 ProductDetailsScreen。
标签: android kotlin android-jetpack-compose jetpack-compose-navigation