Jetpack Compose-访问行/网格中的特定项目



如何更改一行中的可组合项?

例如,如果我有这样的东西:

@Composable
fun WordGrid() {
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly) {
MyCard("")  basically a card with Text
MyCard("")
MyCard("")
}
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly) {
MyCard("")
MyCard("")
MyCard("")

}
}
fun MyCard(text: String?) {
Card() {
Text(
text = text?: ""
)
}
}

和两个按钮:

Button "A" and Button "B"

每次点击一个按钮,一张卡片都应该从按钮中获取文本,然后是下一张卡片,最后一张卡片。

点击按钮A B A B会给你:

@Composable
fun WordGrid() {
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly) {
MyCard("A")  basically a card with Text
MyCard("B")
MyCard("A")
}
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly) {
MyCard("B")
MyCard("")
MyCard("")

}
}

你是如何单向地做这样的事情的?使用XML,您可以直接从ViewModel访问card.id,这里没有id。

唯一的方法是检查按钮是否被按下,然后为其创建一个状态,将其传递给行并运行for循环吗?

这似乎比拥有一个简单的id要复杂得多。

在Compose中,您不能通过ID访问视图。唯一的方法是操作用于构建视图的状态。

我建议你从这个youtube视频开始,它解释了在撰写时需要使用state的基本原则。您可以通过撰写文档中的state继续加深您的知识。

在您的情况下,您可以创建一个字符串的可变状态列表,基于该列表构建视图,并使用按钮按索引进行更新。

以下是您尝试做什么的一个基本示例:

val cards = remember { List(6) { "" }.toMutableStateList() }
var editingIndex by remember { mutableStateOf(0) }
Column {
Row {
val editButton = @Composable { text: String ->
Button({
cards[editingIndex] = text
editingIndex += 1
}) {
Text(text)
}
}
editButton("A")
editButton("B")
}
cards.chunked(cards.count() / 2).forEach { rowCards ->
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly) {
rowCards.forEach {
MyCard(it)
}
}
}
}

最新更新