我使用Android分页库实现了分页。 ViewModel返回一个LiveData<PagedList<MyObject>>
,我观察到在设置适配器的片段中,一切正常,除了我要检查列表的大小始终为0之外。
viewModel.getSearchResults().observe(this, mList -> {
adapter.submitList(mList);
Log.e("Count", String.valueOf(mList.size()));
});
mList是PagedList<MyObject>
答案 0 :(得分:1)
如果您查看PagedList
文档中的Loading Data,则会发现以下内容:
如果您使用
LivePagedListBuilder
来获得LiveData<PagedList>
,它将为您在后台线程上初始化PagedLists。
此外,Mutability and Snapshots指出以下内容:
PagedList在加载时是可变的,或准备从其DataSource加载。随着加载成功,将通过主线程上的Runnables更新可变的PagedList。您可以使用
PagedList.Callback
收听这些更新。 (请注意,PagedListAdapter
将收听这些内容,以向RecyclerView发出有关更新/更改的信号。)
如果您想收听事件onInserted
,onChanged
或onRemoved
,则可以执行以下操作:
viewModel.observableData.observe(viewLifecycleOwner, Observer { pagedList ->
adapter.submitList(pagedList)
pagedList.addWeakCallback(null, object: PagedList.Callback() {
override fun onChanged(position: Int, count: Int) {}
override fun onInserted(position: Int, count: Int) {
println("count: $count")
}
override fun onRemoved(position: Int, count: Int) {}
})
})
答案 1 :(得分:0)
如果你使用 Rxjava3 ,
RxJava3CallAdapterFactory.create()
,默认不同步。
您需要使用 RxJava3CallAdapterFactory.createSynchronous()
。