我得到ViewModel
,接收一个项目,它需要在回收器中更新列表。我让它工作,但我想知道是否有一个更清洁的解决方案。我问addItem
和deleteItem
函数
class MainViewModel(private val app: Application) : AndroidViewModel(app) {
private val roomManager: RoomManager = RoomManagerImpl(app)
private val prefsManager: PrefsManager = PrefsManagerImpl(app)
private val todoItemList: MutableLiveData<List<ToDoItem>> = MutableLiveData()
val todoItemListResult: LiveData<List<ToDoItem>> = todoItemList
fun getAllItems() {
val result = roomManager.getAllItems()
todoItemList.postValue(result)
}
fun addItem(item: ToDoItem) {
val list = todoItemList.value?.let {
it.toMutableList() + item
}
todoItemList.postValue(list)
}
fun updateItem(item: ToDoItem) {
roomManager.editItem(item)
}
fun deleteItem(item: ToDoItem) {
val list = todoItemList.value?.let {
it.toMutableList() - item
}
todoItemList.postValue(list)
roomManager.deleteItem(item)
}
}
这里是activity observer
viewModel.todoItemListResult.observe(this, Observer {
data = it
adapter.updateList(it)
screenDataValidation(it)
})
为什么使用
todoItemList.postValue(list)
postValue()方法速度较慢,因为同步成本较高,并且不需要从主线程进行更新。只需使用value.
在deleteItemaddItem不呢?
在其他情况下,你的代码看起来不错,如果你想避免不必要的结构,我建议这样写:
if (list.isNullOrEmpty())
return
todoItemList.value = todoItemList.value + item
roomManager.add(item)