如何向 MutableLiveData 中的 List 添加数据?
How to add data to List in MutableLiveData?
我想在 ViewModel
中的 MutableLiveData
个 List
中添加一个项目。
List
是 read-only
因为它是用 listOf()
.
初始化的
但在特定情况下我想添加一个项目。
为此,我使用了toMutableList()
到type cast
,但是调试的结果,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
}
}
_items.value?.toMutableList()
创建一个新的列表实例,因此您不会向 LiveData
.
中的列表添加元素
即使您设法将元素添加到 LiveData
中的实际列表对象(通过使用一些肮脏的转换),它也可能不会触发 LiveData
中的更改事件,所以订阅者不会收到新值的通知。
你想要的是实际分配一个新列表给 MutableLiveData
:
_items.value = _items.value?.plus(item) ?: listOf(item)
(如果 LiveData
中的当前列表为空,将分配一个新列表,其中只包含新项目)
我想在 ViewModel
中的 MutableLiveData
个 List
中添加一个项目。
List
是 read-only
因为它是用 listOf()
.
但在特定情况下我想添加一个项目。
为此,我使用了toMutableList()
到type cast
,但是调试的结果,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
}
}
_items.value?.toMutableList()
创建一个新的列表实例,因此您不会向 LiveData
.
即使您设法将元素添加到 LiveData
中的实际列表对象(通过使用一些肮脏的转换),它也可能不会触发 LiveData
中的更改事件,所以订阅者不会收到新值的通知。
你想要的是实际分配一个新列表给 MutableLiveData
:
_items.value = _items.value?.plus(item) ?: listOf(item)
(如果 LiveData
中的当前列表为空,将分配一个新列表,其中只包含新项目)