LiveData分页列表大小始终为0

时间:2019-06-24 19:19:34

标签: android android-livedata android-mvvm android-paging android-paging-library

我使用Android分页库实现了分页。 ViewModel返回一个LiveData<PagedList<MyObject>>,我观察到在设置适配器的片段中,一切正常,除了我要检查列表的大小始终为0之外。

viewModel.getSearchResults().observe(this, mList -> {
           adapter.submitList(mList);
           Log.e("Count", String.valueOf(mList.size()));
       });

mList是PagedList<MyObject>

2 个答案:

答案 0 :(得分:1)

如果您查看PagedList文档中的Loading Data,则会发现以下内容:

  

如果您使用LivePagedListBuilder来获得LiveData<PagedList>,它将为您在后台线程上初始化PagedLists。

此外,Mutability and Snapshots指出以下内容:

  

PagedList在加载时是可变的,或准备从其DataSource加载。随着加载成功,将通过主线程上的Runnables更新可变的PagedList。您可以使用PagedList.Callback收听这些更新。 (请注意,PagedListAdapter将收听这些内容,以向RecyclerView发出有关更新/更改的信号。)

如果您想收听事件onInsertedonChangedonRemoved,则可以执行以下操作:

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()