我正在使用Android LiveData和房间数据库来更新列表。
我有一个笔记列表,其中有一个勾号来标记它们为“完成”。
如果它们被标记为完成,我将它们从当前列表(而不是从数据库)中删除,以便可以在另一个页面上显示它们。
但是将它们标记为完成并不会更新我的列表。
DAO:
@Dao
public interface NoteDao {
@Query("SELECT * FROM notes WHERE isDone=0")
LiveData<List<Note>> getAll();
@Insert
void insert(Note note);
@Delete
void delete(Note note);
@Update
void update(Note note);
}
我的适配器中有一个onchecked listener,它处理列表点击。
Note note = allNotes.get(position);
holder.mCheckBox.setListener(isChecked -> {
note.setIsDone(1);
mNoteDao.update(note);
notifyDataSetChanged();
});
我已经在活动中添加了一个观察函数。
mNoteDao.getAll().observe(this, notes -> {
if (notes != null && notes.size() > 0) {
img_no_notes.setVisibility(View.GONE);
txt_no_notes.setVisibility(View.GONE);
Collections.reverse(notes);
mAdapter.setItems(notes);
} else {
img_no_notes.setVisibility(View.VISIBLE);
txt_no_notes.setVisibility(View.VISIBLE);
}
});
该列表将在重新启动时更新。谢谢你的帮助。
发布于 2018-10-09 09:40:48
您的LiveData只负责对Room数据库的更改做出反应。如果您想更改列表,则需要创建单独的列表或实时数据副本。总体而言,这是一种糟糕的做法,LiveData+Room仅用于数据库更改,而不是内存实例。想象一下,您的LiveData对象就像是房间数据库的包装器。
发布于 2018-05-19 19:24:33
您的笔记可能不会自动更新,因为您的activity 没有更改状态。在这种情况下,您应该在checkbox侦听器中更新已更改注释的UI
来自文档:
LiveData接收一个观察者,并仅当它处于启动或恢复状态时才通知它数据更改。
https://stackoverflow.com/questions/48616419
复制相似问题