[英]LiveData.addSource onChanged event not calling Android
[英]What triggers LiveData onChanged()?
我正在使用Room
,在Dao
我有以下方法:
LiveData<List<Books>> getAllBooks();
在MainActivity中,我已從ViewModel
訂閱了該方法。 更改數據將觸發onChanged()
回調:
viewModel.getAllBooks()
.observe(this, books -> {
Log.d(TAG, "onChanged()");
booksListAdapter.setData(new ArrayList<>(books));
});
我想知道什么是更新? 當應用程序首次啟動時,我會進行100次插入,每個插入都會更改數據庫,但是onChanged()
不會被調用100次。 上一次我檢查它第一次調用onChanged()
時,我認為它總是在啟動時調用,然后再調用兩次。
我可以對此進行控制嗎? 例如,如果我知道將要進行100次插入,那么如果僅在插入結束時獲得回調,那會更好。
您對此無能為力。 您可以做的是使用MediatorLiveData
並在所有插入后發布該值。 每當您進行更新,刪除或插入時,Room都會知道有更改,但不知道更改了什么。 因此,它只是重新查詢並將結果發送給觀察LiveData
查看此博客 ,主要查看第7部分。避免出現可觀查詢的誤報 。 作者提供了一個很好的MediatorLiveData
示例,它與您正在尋找的相似
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.