我对LiveData有一个非常简单的问题。我有一个MutableLiveData<MutableList<Car>>
,我想更新列表中的特定字段,所以我猜想当该字段更新时,MutableLiveData应该触发观察者,但是不会发生。
因此,如果我使用此行代码,则不会触发观察者。
var carList = MutableLiveData<MutableList<Car>>()
...
carList.value?.set(car.id,Car(car.id, color))
但是如果我这样做,就会触发观察者。
var carList = MutableLiveData<MutableList<Car>>()
...
var newList = carList.value
carList?.set(car.id,Car(car.id, color))
carList.value = newList
可以请人解释为什么会这样吗?给要触发的实时数据提供一个全新的列表是否必不可少,或者我缺少某些东西?预先谢谢你。
MutableLiveData
然后从fun <T> MutableLiveData<MutableList<T>>.addNewItem(item: T) {
val oldValue = this.value ?: mutableListOf()
oldValue.add(item)
this.value = oldValue
}
fun <T> MutableLiveData<MutableList<T>>.addNewItemAt(index: Int, item: T) {
val oldValue = this.value ?: mutableListOf()
oldValue.add(index, item)
this.value = oldValue
}
fun <T> MutableLiveData<MutableList<T>>.removeItemAt(index: Int) {
if (!this.value.isNullOrEmpty()) {
val oldValue = this.value
oldValue?.removeAt(index)
this.value = oldValue
} else {
this.value = mutableListOf()
}
}
添加/删除项目,例如:
MutableLiveData