观察LiveData中对象的选定属性的更改

时间:2019-05-02 15:45:49

标签: android-room observer-pattern android-livedata

我正在观察以下LiveData:

BookDao:

@Query("SELECT * FROM books")
LiveData<List<Book>> getBooks();

在片段中,我正在观察这种方式(简化):

viewModel.getBooks().observe(getViewLifecycleOwner(), b -> adapter.setBooks(b));

一切正常,adapter显示所有书籍。但是,当db(favourite列)中的标志更改时,我需要禁用刷新。换句话说,当任何一本书被标记为收藏时,我都不想运行observer。有什么方法可以观察book列中除favourite列之外的所有列?在observer中添加条件不是一个好主意,因为将新状态与先前状态进行比较会导致O(n^2)的复杂性。谢谢。

1 个答案:

答案 0 :(得分:0)

  

换句话说,当任何一本书被标记为收藏时,我都不想让观察者奔跑。

获得第一个查询后,您可以使用.removeObserver()

  

有什么方法可以观察书中除喜欢的列以外的所有列?

在Dao中编写一个sql查询来执行此操作,然后观察它,例如:

SELECT Title, Body FROM TABLENAME;
相关问题