android - 在Android中检测空的PagedList结果
问题描述
我正在使用 Android Jetpack 中的Paging库在我的 RecyclerView 中进行分页加载行为。现在我想要一个简单的事情 - 在我的 UI 中获得一个没有数据且列表为空的信号,这样我就可以显示“没有项目”之类的消息。
问题是我PositionalDataSource
没有使用占位符,因为我不知道列表会有多大。另一个问题是我只能PagedList
从DataSource
.
所以问题是 - PagedList
or是否DataSource
会发出“我已完成加载”之类的信号?该事件在库中明确定义,因为一旦获得的数据少于要求的数据,它将停止加载,如此处所述:返回的数据必须是这个大小,除非在列表末尾。问题是——我能以某种方式得到那个事件的信号吗?
现在我看到以下解决方案。我已经实现了我DataSource.Factory
在此页面中显示的 Android 指南中的内容:将我DataSource
的作为LiveData
工厂分发。LiveData
此外,我已经从DataSource
被调用的对象中暴露了一个对象isLoading
,我在 UI 中使用它来在每次DataSource
加载某些内容时显示一个进度条。我正在考虑添加另一个LiveData
调用emptyResults
,然后我可以在我的 UI 中将两者连接在一起,以便在emptyResults && !isLoading
.
我想知道是否有更好的方法来做到这一点。
解决方案
这个解决方案对我有用:
添加适配器观察者:
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
}
}
}
推荐阅读
- java - Spring MVC中如何通过Controller将数据从MongoDB转换到View
- php - 更新帖子在与更新用户一起使用时不起作用
- node.js - 如何检查是否发送了 AXIOS POST 请求?
- ios - 为 Swift UI 视图创建自定义修饰符
- javascript - 使用 Plotly.js 和 Node.js 获取和绘制数据
- apache-kafka - Kstream 的成本与 KTable 相对于状态存储的成本
- c++ - 构建对象数组是如何工作的?我坚持这个例子
- c# - 如何将嵌套的父节点添加到现有节点
- android - 使用 WebRTC Android 回声
- php - PHP 变化?从网址到 /