如何优化视图模型?



我得到ViewModel,接收一个项目,它需要在回收器中更新列表。我让它工作,但我想知道是否有一个更清洁的解决方案。我问addItemdeleteItem函数

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)

最新更新