LiveData 分页列表大小始终为 0

max*_*max 8 android android-mvvm android-livedata android-paging android-paging-library

我使用android分页库实现了分页。ViewModel 返回 aLiveData<PagedList<MyObject>>并且我观察到在我设置适配器的片段中一切正常,除了当我想检查列表的大小时始终为 0。

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

其中 mList 是 PagedList<MyObject>

Rod*_*roz 13

如果您查看从文档中加载数据PagedList您会注意到以下内容:

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

此外,可变性和快照声明如下:

PagedList 在加载或准备从其数据源加载时是可变的。当加载成功时,一个可变的 PagedList 将通过主线程上的 Runnables 进行更新。您可以使用PagedList.Callback. (请注意,PagedListAdapter将监听这些以向 RecyclerView 发送有关更新/更改的信号)。

如果您想监听事件onInsertedonChanged或者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) {}
    })
})
Run Code Online (Sandbox Code Playgroud)

  • 如果列表大小实际上为 0,我不会收到任何回调。我想显示无结果消息,有什么建议吗? (2认同)