繁体   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