我得到了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)
}
}
这是活动观察者
viewModel.todoItemListResult.observe(this, Observer {
data = it
adapter.updateList(it)
screenDataValidation(it)
})
1条答案
按热度按时间0ejtzxu11#
你为什么使用
postValue()方法速度较慢,因为同步开销较大,并且在从主线程更新时不需要。只需使用value。
在deleteItem方法中,您在room中设置了数据,而在addItem中没有设置数据?
在其他事情,你的代码似乎可以,如果你想避免不必要的结构,我建议这样写: