android 如何优化视图模型?

r3i60tvu  于 2023-01-19  发布在  Android
关注(0)|答案(1)|浏览(136)

我得到了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)
}

}
这是活动观察者

viewModel.todoItemListResult.observe(this, Observer {
        data = it
        adapter.updateList(it)
        screenDataValidation(it)
    })
0ejtzxu1

0ejtzxu11#

你为什么使用

todoItemList.postValue(list)

postValue()方法速度较慢,因为同步开销较大,并且在从主线程更新时不需要。只需使用value
deleteItem方法中,您在room中设置了数据,而在addItem中没有设置数据?
在其他事情,你的代码似乎可以,如果你想避免不必要的结构,我建议这样写:

if (list.isNullOrEmpty())
    return

todoItemList.value = todoItemList.value + item
roomManager.add(item)

相关问题