【发布时间】:2021-02-09 08:37:30
【问题描述】:
我有一个像这样的数据类:
data class Item(
val name: String,
val price: Int = 0
)
还有一个 ViewModel,例如:
class MyViewModel(app: Application) : AndroidViewModel(app) {
private val _items = MutableLiveData<MutableList<Item>>()
val items: LiveData<MutableList<Item>>
get() = _items
init {
_items.value = mutableListOf()
}
fun addItem(){
_items.value?.add(Item(name="newitem", price=10))
_items.value = _items.value
}
}
addItem()被调用后,_items和items添加了新的item,可以通过Log.d()确认。但是,UI 没有反映更改,我该如何解决这个问题?
一种可行的方法是使用MutableLiveData<List<Item>> 而不是MutableLiveData<MutableList<Item>>,使用_items.value = _items.value?.plus(arrayListOf(newItem))。但是,这样我就无法更新添加项目的单个属性,例如price。
【问题讨论】:
-
您使用的是什么 UI 元素以及它是如何观察到这一点的。它是一个 ListAdapter 吗?
-
尝试 _items.notifyObserver() 通知所有观察者。
-
把
MutableLiveData<MutableList<T>>换成MutableLiveData<List<T>>,你的所有问题都会迎刃而解
标签: android kotlin android-livedata android-jetpack mutablelivedata