所以我通过viewmodel在recyclerview中观察我的房间数据库。为了更新一行,我在活动中对存储库对象调用update方法。我做得对吗?因为这是我在教程中看到的。我的问题是,如果我们使用存储库对象进行更新、创建和查看模型来读取数据,那么livedata的setdata和postdata方法的用例是什么?此外,如何更新整个表(覆盖(?
观察
noteViewModel.getAllNotes().observe(this, Observer<List<Note>> { notes ->
notes?.let {
notesList = notes as ArrayList<Note>
notesAdapter = NotesAdapter(notes, this@MainActivity)
recyclerView.adapter = notesAdapter
notesAdapter!!.notifyDataSetChanged()
}
})
更新
NoteDatabase.getInstance(this@MainActivity).noteDao().updateNote(
notechecked.also { it.done = value }
您的代码很好。这正是您应该如何观察和更新Room
中的行。
LiveData
的setData
和postData
方法的用例是。。好以更新LiveData对象。
例如,每当您以影响LiveData
对象的方式更新DB时,Room
都会使用postData()
来更新它最初返回的LiveData
对象(当您调用getAllNotes()
时(。
因为Room
为您调用postData()
,所以您不需要。
但是,如果您要在LiveData
对象内的viewmodel
(而不是Room
(中直接保留一些值,并且您希望在用户单击视图中的某个内容时对其进行更改,则必须自己调用setData/postData
。