You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中MutableList的set方法为何无法修改元素?

问题解决:列表元素替换后未生效

你的代码核心问题是仅修改了临时生成的可变列表副本,未将修改后的列表赋值回原状态变量。todoItemList.value?.toMutableList()会创建一个全新的可变列表,你对这个副本的修改不会同步到原todoItemList.value上,所以看起来set方法没有生效。

修正后的代码如下:

val foundIndex = todoItemList.value?.indexOfFirst { it.id == item.id }
foundIndex?.let { idx ->
    val mutableList = todoItemList.value?.toMutableList() ?: return@let
    mutableList[idx] = item // 和set(idx, item)效果一致,写法更简洁
    todoItemList.value = mutableList // 关键:将修改后的列表赋值回原状态,触发更新
}

补充说明:

  • 加入空安全判断,如果todoItemList.value为null,直接跳出let块避免后续错误
  • 这类状态容器(比如Compose的mutableStateOf、ViewModel的StateFlow)依赖不可变数据更新机制,必须通过赋值新列表来触发状态刷新,修改副本无法自动同步原状态

内容的提问来源于stack exchange,提问作者Bo Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 04:50:27