android Jetpack合成动态按钮ID

lmvvr0a8  于 2023-03-16  发布在  Android
关注(0)|答案(1)|浏览(143)

我可以通过按下按钮并更新相关状态来更改1个按钮的背景颜色,如下所示:

@Composable
fun makeButtons() {
    var isPressed by remember { mutableStateOf(false) }
    val color = if (isPressed) Color.Red else Color.Green

    Column {
        Button(
            onClick = { isPressed = !isPressed },
            colors = ButtonDefaults.buttonColors(backgroundColor = color)
        ) {
            Text("Btn")
        }
    }
}

但是,当所有按钮都是动态创建的(即在for循环中)时,我如何定位单个按钮(即通过它的ID或Text值)呢?

@Composable
fun makeButtons() {
    var isPressed by remember { mutableStateOf(false) }
    val color = if (isPressed) Color.Red else Color.Green

    Column {
        for (i in 1..5) {
            Button(
                onClick = { isPressed = !isPressed },
                colors = ButtonDefaults.buttonColors(backgroundColor = color)
            ) {
                Text("Btn $i")
            }
        }
    }
}

我希望能够改变每个按钮的背景颜色,分别。目前,如果你运行上述代码,所有将改变颜色一起,如果你按下任何。
第一节第一节第一节第一节第一次

irlmq6kh

irlmq6kh1#

你可以用mutableStateListOf来代替mutableStateOf,或者你可以简单地在for循环中定义isPressed

for (i in 1..5) {
        var isPressed by remember { mutableStateOf(false) }
        val color = if (isPressed) Color.Red else Color.Green
        
        Button(
            onClick = { isPressed = !isPressed },
            colors = ButtonDefaults.buttonColors(backgroundColor = color)
        ) {
            Text("Btn $i")
        }
    }

相关问题