我有一个文本的字符串列表,当我点击其中一个时,我应该用一种 colored颜色 给它上色,目前我的实现给所有的文本上色,我做错了什么?

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)
                    }
            )
        }
    }

推荐答案

我修改了你的代码,我降低了动画和按下的状态,这样父合成体就不会受到它自己的re-composition

@Composable
fun MyScreen(
    modifier: Modifier = Modifier,
    filterList: SnapshotStateList<String>
) {
    LazyRow(
        modifier = modifier,
        horizontalArrangement = Arrangement.spacedBy(25.dp)
    ) {

        items(filterList) { filterName ->
            FilterText(
                filterName
            )
        }
    }
}

@Composable
fun FilterText(
    filter: String
) {

    var isPressed by remember { mutableStateOf(false) }
    val buttonColor: Color by animateColorAsState(
        targetValue = when (isPressed) {
            true -> Color.Blue
            false -> Color.Green
        },
        animationSpec = tween()
    )

    Text(
        text = filter,
        modifier = Modifier
            .background(shape = RoundedCornerShape(24.dp), color = buttonColor)
            .padding(horizontal = 16.dp, vertical = 8.dp)
            .clickable {
                isPressed = !isPressed
            }
    )
}

enter image description here

Android相关问答推荐

将Android Studio插件复制到离线网络

格雷德的两个星号是什么意思?非路径

在Android 14/SDK 34中使用RegisterReceiver的正确方式是什么?

使用Kotline绑定时,ViewHolder无法识别文本视图

FireBase Android ChildEventListener在被规则拒绝时触发(RTDB)

如何在使用带有底部导航组件的片段管理器时更改片段工具栏的标签

Jetpack Compose-如何在进入新产品线之前删除单词?

SDK 33 的问题 - 面向 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一

Play store 的 Play 完整性与 Firebase 应用判断 Play 完整性

FFmpeg Android 错误

当 Firebase Firestore 发生变化时,Kotlin ViewModel 不会更新

如何在 Jetpack Compose 中的特定位置绘制图像

从 Jetpack Compose 中的 IconButton 中删除黑色色调

在 Compose 中停止键盘将顶部应用栏推离屏幕

viewModel 的可变值状态不起作用

Jetpack Compose 重组竞争条件

优化 Room 数据库迁移

如何为具有不同屏幕尺寸但相同密度的手机创建响应式布局?

如何在 kotlin 的 android room DB 中设置一对多关系

如何使在库范围之外无法访问的接口的具体实现.?