我想向ViewModel
中的MutableLiveData
的List
添加一个项目。
List
是read-only
,因为它是用listOf()
初始化的。
但在特定情况下,我想添加一个项目。
为此,我对type cast
使用了toMutableList()
,但由于调试的结果,LiveData
的List
没有变化。
如何将数据应用于LiveData
的List
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
}
}
发布于 2021-09-10 22:38:17
_items.value?.toMutableList()
会创建一个新的list实例,因此您不会向LiveData
中的list添加元素。
即使您设法将元素添加到LiveData
中的实际list对象(通过使用一些脏转换),它也可能不会在LiveData
中触发更改事件,因此订阅者不会收到新值的通知。
您想要的实际上是将一个新列表分配给MutableLiveData
_items.value = _items.value?.plus(item) ?: listOf(item)
(如果LiveData
中的当前列表为空,则仅使用新项目分配新列表)
https://stackoverflow.com/questions/69137842
复制相似问题