首页 > 解决方案 > 在Android中检测空的PagedList结果

问题描述

我正在使用 Android Jetpack 中的Paging库在我的 RecyclerView 中进行分页加载行为。现在我想要一个简单的事情 - 在我的 UI 中获得一个没有数据且列表为空的信号,这样我就可以显示“没有项目”之类的消息。

问题是我PositionalDataSource 没有使用占位符,因为我不知道列表会有多大。另一个问题是我只能PagedListDataSource.

所以问题是 - PagedListor是否DataSource会发出“我已完成加载”之类的信号?该事件在库中明确定义,因为一旦获得的数据少于要求的数据,它将停止加载,如此所述:返回的数据必须是这个大小,除非在列表末尾。问题是——我能以某种方式得到那个事件的信号吗?

现在我看到以下解决方案。我已经实现了我DataSource.Factory此页面中显示的 Android 指南中的内容:将我DataSource的作为LiveData工厂分发。LiveData此外,我已经从DataSource被调用的对象中暴露了一个对象isLoading,我在 UI 中使用它来在每次DataSource加载某些内容时显示一个进度条。我正在考虑添加另一个LiveData调用emptyResults,然后我可以在我的 UI 中将两者连接在一起,以便在emptyResults && !isLoading.

我想知道是否有更好的方法来做到这一点。

标签: androidandroid-architecture-componentsandroid-jetpackandroid-pagingandroid-paging-library

解决方案


这个解决方案对我有用:

添加适配器观察者:

adapter?.registerAdapterDataObserver(adapterObserver)

检测列表是否为空并插入 0 个项目

private val adapterObserver = object : RecyclerView.AdapterDataObserver() {
    override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {

        val count = adapter?.itemCount
        if (itemCount == 0 && count == 0) {
            // List is empty
        } else {
            // List is not empty
        }
    }
}

推荐阅读