首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jetpack组合行/列onClick导航

jetpack组合行/列onClick导航
EN

Stack Overflow用户
提问于 2022-09-20 10:12:19
回答 1查看 239关注 0票数 1

请原谅我我不知道如何恰当地表达我的问题,但我会尽我所能的。

我把多个可合成材料放在一起制作了上面的屏幕。

我给了可组合的行一个onClick函数;

代码语言:javascript
复制
@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

代码语言:javascript
复制
@Composable
fun MenuContentScreen(modifier: Modifier = Modifier) {
    Column(
        modifier
            .verticalScroll(rememberScrollState())
            .padding(vertical = 16.dp)) {
        MenuQuote()
        MenuContentSection(title = R.string.favorite_collections) {
            MenuGrid()
        }
    }
}

然后,我在屏幕MenuScreen的主可组合上引用/调用了MenuScreen。(在NavHost中定义的)

代码语言:javascript
复制
@Composable
fun MenuScreen() {
    MenuContentScreen(Modifier.padding())

}

这就是问题所在的地方,因为onClick函数是在另一个可组合函数中定义的,所以不能将onClick函数用于MenuScreen

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

我将非常感谢任何帮助。我一直都是这样的人。请不要太小的信息。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-20 10:33:36

您需要携带onClick lambda直到您的MenuScreen可组合,例如

代码语言:javascript
复制
@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

打电话

代码语言:javascript
复制
MenuContentScreen {
  navController.navigate()
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73785065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档