在 jetpack 撰写导航中传递参数

问题描述 投票:0回答:2

我有一个可点击的行,可以重定向到 FoodProducts:

.clickable {
                // Navigate to FoodProductsScreen when clicked
                Log.d("Navigation", "Category ID: ${category.id}")

                navController.navigate("${NavGraph.FoodProducts}?categoryId=${category.id}")

            },`

当我在这里打印category.id时,它在控制台上记录2,但是当我在NavHost中打印它时,它显示0:

`        
composable(NavGraph.FoodProducts) { backStackEntry ->
           
            val categoryId = backStackEntry.arguments?.getInt("categoryId") ?: 2
            Log.d("Navigation", "Received Category ID: $categoryId")
            FoodProductsScreen(navController, categoryId)
        }`

食品屏幕:

`@Composable
fun FoodProductsScreen(navController: NavController, categoryId: Int) {
    val productsInCategory = products.filter { it.id == categoryId }

    Column(
        modifier = Modifier
            .fillMaxWidth()
            .padding(8.dp)
    ) {
        Text(text = "${categoryId}")
    }
    LazyColumn {
        items(productsInCategory) { product ->
            FoodProductItem(product = product)
        }
    }
}`

我尝试了很多方法,但似乎没有任何效果......

我尝试从最后一个视图中检索参数,如下所示:

FoodProductsScreen(navController, backStackEntry.arguments?.getInt("categoryId") ?: 1)
但没成功

kotlin android-jetpack-compose
2个回答
0
投票
 val categoryId = navController.currentBackStackEntry
    ?.savedStateHandle?.get<Int>("categoryId") ?: 2

你能试试这个吗?


0
投票

我认为最简单的方法。

val myPassedArg = 1
navController.navigate("foodProductsScreenRoute" +"?passedArg=$myPassedArg")

在导航图中:

composable(route = "foodProductsScreenRoute" + "?passedArg={myArg}"){ backStackEntry ->
val defaultValue = 2
val arg = backStackEntry.arguments?.getInt("myArg")?:defaultValue
FoodProductsScreen(navController = navController,arg)
}
© www.soinside.com 2019 - 2024. All rights reserved.