我有一个数据类:
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
中添加新项,可由Log.d()
确认。但是,UI没有反映更改,我该如何解决这个问题?
一个有效的方法是用MutableLiveData<List<Item>>
代替MutableLiveData<MutableList<Item>>
,用_items.value = _items.value?.plus(arrayListOf(newItem))
。但是,这样我就不能更新添加项的单个属性,例如price
。
创建临时mutableList,在临时列表中添加新项,然后将_items更新为:_items.value = temp
。这样,我们改变了mutableelvedata的引用并触发了更新