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

如何向MutableLiveData中存储的List添加数据?

错误原因
  1. toMutableList() 方法会生成一个全新的可变列表副本,你调用 add 方法修改的是这个临时副本,并没有改动 MutableLiveData 内部存储的原列表数据
  2. MutableLiveData 只有在主动更新其 value 属性时,才会修改内部存储的值并通知观察者,仅修改 value 指向对象的内部属性不会触发更新
正确实现方式

修改后的代码如下:

class WriteRoutineViewModel : ViewModel() {
    private var _items: MutableLiveData<List<RoutineModel>> = MutableLiveData(listOf())
    val items: LiveData<List<RoutineModel>> = _items

    fun addRoutine(workout: String) {
        val item = RoutineModel(workout, "TEST")
        // 生成包含新元素的新列表,重新赋值给LiveData
        _items.value = _items.value.orEmpty() + item
    }
}

如果更习惯显式转可变列表的写法,也可以用下面的等价写法:

fun addRoutine(workout: String) {
    val item = RoutineModel(workout, "TEST")
    val currentList = _items.value.orEmpty()
    val mutableList = currentList.toMutableList()
    mutableList.add(item)
    _items.value = mutableList
}
注意事项
  • 每次修改列表都生成新的列表实例赋值给LiveData,是官方推荐的最佳实践,避免因为同一个实例引用导致LiveData不触发更新
  • 不建议直接将LiveData泛型声明为MutableList后反复修改同一个实例,容易出现状态同步问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:27:02