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

How to add data to List in MutableLiveData?

我想在 ViewModel 中的 MutableLiveDataList 中添加一个项目。

Listread-only 因为它是用 listOf().

初始化的

但在特定情况下我想添加一个项目。

为此,我使用了toMutableList()type cast,但是调试的结果,LiveDataList没有变化。

如何将数据应用于 LiveDataList

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")
        _items.value?.toMutableList()?.add(item) // nothing change
    }
}

_items.value?.toMutableList() 创建一个新的列表实例,因此您不会向 LiveData.

中的列表添加元素

即使您设法将元素添加到 LiveData 中的实际列表对象(通过使用一些肮脏的转换),它也可能不会触发 LiveData 中的更改事件,所以订阅者不会收到新值的通知。

你想要的是实际分配一个新列表给 MutableLiveData:

_items.value = _items.value?.plus(item) ?: listOf(item)

(如果 LiveData 中的当前列表为空,将分配一个新列表,其中只包含新项目)