我有一个文本的字符串列表,当我点击其中一个时,我应该用一种颜色来着色,目前我的实现着色了所有的文本,我做错了什么?
var isPressed by remember { mutableStateOf(false) }
val buttonColor: Color by animateColorAsState(
targetValue = when (isPressed) {
true -> FreshGreen
false -> PastelPeach
},
animationSpec = tween()
)
LazyRow(
modifier = modifier,
horizontalArrangement = Arrangement.spacedBy(25.dp)
) {
items(filterList) { filterName ->
Text(
text = filterName,
modifier = Modifier
.background(shape = RoundedCornerShape(24.dp), color = buttonColor)
.padding(horizontal = 16.dp, vertical = 8.dp)
.clickable(
interactionSource = remember { MutableInteractionSource() },
indication = null
) {
isPressed = !isPressed
onFilterClick(filterName)
}
)
}
}
3条答案
按热度按时间olmpazwi1#
我修改了您的代码,降低了动画和按下状态的级别,这样父级可组合对象就不会受到它自己的
re-composition
的影响mnemlml82#
您对所有项目使用相同的状态(
isPressed
)。作为z.y's answer的替代方法,您可以将
isPressed
声明移到items
块中:yjghlzjz3#
对于那些只想保持选择只有一个项目的时间,这里是我去的方式