如何在我的按鈕中開始重新組合?據我了解串列中的某些內容需要更改,我該怎么做?
data class KeyData(var text: String, val size: Int, var colour: Color)
val firstRowKeyboard = listOf("Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P")
.map { text: String -> KeyData(text, 35, Color.White) }.toMutableStateList()
// I tried both ways, but nothing changes
val secondRowKeyboard = "ASDFGHJKL".toCharArray()
.map { text: Char -> KeyData(text.toString(), 35, Color.White) }.toMutableStateList()
和觸發器:
fun checkKeyboard() {
for (i in 0..9){
val letter = firstRowKeyboard[i]
if (letter.text in yellowLetterList){
firstRowKeyboard[i] = letter.copy(colour = Color.Yellow)
}
}
}
和我的可組合物:
@Composable
fun Keyboard() {
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly) {
viewModel.firstRowKeyboard.forEach {
MyKeyboardButton(it.text, it.size, it.colour)
}
}
}
@Composable
fun MyKeyboardButton(text: String, width: Int, colour: Color) {
val buttonColour by remember {
mutableStateOf(colour)
}
Button(
onClick = {
viewModel.addLettersToGrid(text)
},
modifier = Modifier
.width(width.dp)
.height(60.dp)
.padding(0.dp, 2.dp),
colors = ButtonDefaults.buttonColors(backgroundColor = buttonColour),
border = BorderStroke(2.dp, Color.LightGray)
) {
Text(text = text, textAlign = TextAlign.Center)
}
}
串列中的顏色正在發生變化,所以有些東西正在作業,但是永遠不會觸發重新組合。
如果 KeyData 更改的顏色不夠,那么我需要更改串列中的文本嗎?什么是好的選擇?
uj5u.com熱心網友回復:
你沒有設定
val buttonColour by remember {
mutableStateOf(colour)
}
除了組成。
您可以采取的選擇很少
第一個不是那么好,但它仍然可以作業
val buttonColour by remember {
mutableStateOf(colour)
}
buttonColour = colour
或者
val buttonColour by remember(colour) {
mutableStateOf(colour)
}
更好的選擇是洗掉
val buttonColour by remember(colour) {
mutableStateOf(colour)
}
從我的鍵盤按鈕
@Composable
fun MyKeyboardButton(text: String, width: Int, colour: Color) {
Button(
onClick = {
viewModel.addLettersToGrid(text)
},
modifier = Modifier
.width(width.dp)
.height(60.dp)
.padding(0.dp, 2.dp),
colors = ButtonDefaults.buttonColors(backgroundColor = colour),
border = BorderStroke(2.dp, Color.LightGray)
) {
Text(text = text, textAlign = TextAlign.Center)
}
}
并將其更改為無狀態可組合,因為您從 ViewModel 傳遞顏色。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/472074.html
標籤:安卓 科特林 android-jetpack-compose
