【问题标题】:How to update a row in room? (please read first)如何更新房间中的一行? (请先阅读)
【发布时间】:2020-08-30 15:42:18
【问题描述】:

所以我通过 viewmodel 在 recyclerview 中观察我的房间数据库。为了更新一行,我在活动中调用存储库对象的更新方法。我做对了吗?因为这是我在教程中看到的。我的问题是,如果我们使用存储库对象进行更新、创建和视图模型来读取数据,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 }

【问题讨论】:

    标签: android kotlin viewmodel android-livedata


    【解决方案1】:

    您的代码很好。这正是您应该如何观察和更新 Room 中的行的方式。

    LiveDatasetDatapostData 方法的用例是……嗯……更新 LiveData 对象。

    例如,Room 使用postData() 更新它最初返回的LiveData 对象(当您调用getAllNotes() 时),只要您以影响您的LiveData 对象的方式更新您的数据库。

    因为Room 会为你调用postData(),所以你不需要。

    但是,如果您要在viewmodel(而不是Room)中直接保存一些值,在LiveData 对象中,并且您希望在用户单击视图中的某些内容时更改它,你必须自己打电话给setData/postData

    【讨论】:

    • 感谢您的回答。解释得很好。
    • 很高兴我能帮上忙!请接受答案,以便其他人更容易找到它
    猜你喜欢
    • 1970-01-01
    • 2018-11-16
    • 2017-03-14
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 2021-02-23
    相关资源
    最近更新 更多