【发布时间】:2019-09-21 04:26:27
【问题描述】:
我正在观察以下 LiveData:
书道:
@Query("SELECT * FROM books")
LiveData<List<Book>> getBooks();
在片段中,我是这样观察的(简化):
viewModel.getBooks().observe(getViewLifecycleOwner(), b -> adapter.setBooks(b));
一切正常,adapter 显示所有书籍。但是,当 db(favourite 列)中的标志更改时,我需要禁用刷新。换句话说,当任何一本书被标记为收藏时,我不希望observer 运行。除了favourite 列之外,有什么方法可以观察book 的所有列?向observer 添加条件不是一个好主意,因为将新状态与先前状态进行比较会导致O(n^2) 复杂性。谢谢。
【问题讨论】:
-
我怀疑这是可能的。当一个表被更新时,
Room被通知该表已更改,但它不知道表的哪一部分已更改。您已经提到 diff 不是一种选择。为Favourite创建一个单独的表,或者仅在这种情况下不使用LiveData怎么样?
标签: android-room observer-pattern android-livedata