gpt4 book ai didi

Android LiveData 列表未更新

转载 作者:行者123 更新时间:2023-11-30 00:08:09 24 4
gpt4 key购买 nike

我正在使用 Android LiveData 和房间数据库来更新列表。

我有一个笔记列表,上面有一个勾号将它们标记为“完成”。

如果它们被标记为完成,我将它们从当前列表(而不是从数据库)中删除,以便它们可以显示在另一个页面上。

但将它们标记为完成并不会更新我的列表。

道:

    @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 监听器,用于处理列表点击。

 Note note = allNotes.get(position);
holder.mCheckBox.setListener(isChecked -> {
note.setIsDone(1);
mNoteDao.update(note);
notifyDataSetChanged();
});

我在 Activity 中添加了一个观察函数。

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);
}
});

列表在重新启动时更新。感谢您的帮助。

最佳答案

您的 LiveData 仅负责对 Room 数据库更改使用react。如果您想更改列表,您需要创建单独的列表或实时数据副本。总的来说这是不好的做法,LiveData+Room 仅用于数据库更改而不是内存实例。将您的 LiveData 对象想象成 Room 数据库的包装。

关于Android LiveData 列表未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48616419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com