【问题标题】:jetpack Compose row/column onClick navigationjetpack Compose 行/列点击导航
【发布时间】:2022-11-24 02:10:39
【问题描述】:

请耐心等待我不知道如何正确表达我的问题,但我会尽力而为。


我把屏幕放在上面多个可组合项一起。


我为携带该行的可组合项提供了一个 onClick 函数;

@Composable
fun MenuGrid(
    modifier: Modifier = Modifier,
    onMenuCardClick: (Int) -> Unit = {},
) {
    LazyHorizontalGrid(
        rows = GridCells.Fixed(3),
        contentPadding = PaddingValues(horizontal = 16.dp),
        horizontalArrangement = Arrangement.spacedBy(8.dp),
        verticalArrangement = Arrangement.spacedBy(8.dp),
        modifier = modifier
            .height(200.dp)
    ) {
        items(MenuData) { item ->
            MenuCard(
                drawable = item.drawable,
                text = item.text,
                modifier = Modifier
                    .height(56.dp)
                    .clickable { onMenuCardClick(item.drawable + item.text) }
            )
        }
    }
}


就像我之前说的,我把多个可组合项在一起,形成上图。我安排了多个可组合项在可组合项中,我调用了MenuContentScreen

@Composable
fun MenuContentScreen(modifier: Modifier = Modifier) {
    Column(
        modifier
            .verticalScroll(rememberScrollState())
            .padding(vertical = 16.dp)) {
        MenuQuote()
        MenuContentSection(title = R.string.favorite_collections) {
            MenuGrid()
        }
    }
}


然后我在该屏幕 MenuScreen 的主要可组合项上引用/调用了 MenuContentScreen。 (在 NavHost 中定义的那个)

@Composable
fun MenuScreen() {
    MenuContentScreen(Modifier.padding())

}


哪个是哪里问题是的,因为 onClick 函数是在另一个可组合项中定义的,所以我不能为 MenuScreen 使用 onClick 函数;


所以我的问题有没有办法可以将 MenuGrid 上的 onClick 函数链接到 MenuScreen,也许在 MenuScreen 上创建一个参数并将其分配给 MenuGrid 的 onClick 函数(我试过并得到val cannot be assigned), 或者任何东西。

我将不胜感激任何帮助。我一直在做这件事。请没有信息太小。

提前致谢。

【问题讨论】:

    标签: kotlin android-jetpack-compose android-jetpack jetpack-compose-navigation


    【解决方案1】:

    您需要继续点击 lambda 直到您的 MenuScreen 可组合项,例如

    @Composable
    fun MenuContentScreen(modifier: Modifier = Modifier,
        onMenuCardClick: () -> Unit
    ) {
        Column(
            modifier
                .verticalScroll(rememberScrollState())
                .padding(vertical = 16.dp)) {
            MenuQuote()
            MenuContentSection(title = R.string.favorite_collections) {
                MenuGrid(){
                   onMenuCardClick()
            }
        }
    }
    
    @Composable
    fun MenuScreen(
         onMenuCardClick: () -> Unit
    ) {
        MenuContentScreen(Modifier.padding(), onClick= onMenuCardClick)
    
    }
    

    在你的导航图中没有将 navController 传递给MenuScreen

    称呼

    MenuContentScreen {
      navController.navigate()
    }
    

    【讨论】:

    • 非常感谢您的帮助 Thracian。我现在面临的问题是我的 MenuScreen 文件中没有定义 navController。但是我的 NavHost 文件,我根据 Android 开发者指南做了。请问如何在不创建新的 navController 的情况下解决这个问题。
    • 您不必通过 navController。我更新了答案。您只需添加回调直到您的 navGraph。在 navgraph 中的内部回调使用 navController
    • 感谢色雷斯人的快速更新。我试过了,但出现了两个错误;找不到具有此名称的参数:“onClick”,并且没有为参数“onMenuCardClick”传递值
    • 我用不同的名称将其作为演示发布,但您可以将两个回调命名为 onMenuCardClick 。这里的想法是将回调从内部移动到外部,而不是将 navigationController 从外部 Composable 传递到内部 Composable
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2023-03-28
    • 1970-01-01
    • 2021-10-13
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多