簡體   English   中英

是什么觸發LiveData onChanged()?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM