android - 位置数据源不加载所有数据
问题描述
我正在尝试使用Positional DataSource。我创建了以下虚拟源。
class ContactsDataSource : PositionalDataSource<Contact>() {
override fun loadRange(params: LoadRangeParams, callback: LoadRangeCallback<Contact>) {
val c = ArrayList<Contact>()
for (i in params.startPosition..params.loadSize) {
c.add(Contact("$i contact"))
}
callback.onResult(c)
Logger.d("loadRange: StartPos: ${params.startPosition} LoadSize: ${params.loadSize}")
}
override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback<Contact>) {
Logger.d("Load Initial: PageSize: ${params.pageSize} LoadSize: ${params.requestedLoadSize}")
val c = ArrayList<Contact>()
for (i in 0 until params.requestedLoadSize) {
c.add(Contact("$i contact"))
}
callback.onResult(c, 0, 1000)
}
}
class ContactsDsFactory : DataSource.Factory<Int, Contact>() {
override fun create(): DataSource<Int, Contact> {
return ContactsDataSource()
}
}
第一次,它调用loadInitial
并加载项目。当我向上滚动时,它会通过调用加载更多项目loadRange
。负载范围第一次调用后,不再调用。loadInitial
虽然,加载的项目少于我在回调中传递的总数。这是我设置源的方式。
val config = PagedList.Config.Builder().setEnablePlaceholders(false)
.setMaxSize(120)
.setInitialLoadSizeHint(60)
.setPageSize(20).build()
val list = LivePagedListBuilder<Int, Contact>(ContactsDsFactory(), config)
.build()
val recycler = findViewById<RecyclerView>(R.id.recycler)
recycler.layoutManager = LinearLayoutManager(this)
val adapter = ContactsRecycler()
recycler.adapter = adapter
list.observe(this, Observer {
adapter.submitList(it)
})
这些是日志
D/PagedLab: Load Initial: PageSize: 20 LoadSize: 60
D/PagedLab: loadRange: StartPos: 60 LoadSize: 20
任何帮助将不胜感激。
解决方案
我创建了一个MovieListDataSource
扩展类PositionalDataSource
。事实是您必须使用PagedListAdapter
,这将调用loadAround(int)
. 如果一切正常,那么就不会有加载问题。单击 此处,您将获得我的实现。希望这会帮助你。
推荐阅读
- c++ - 有谁知道 ziplib 是否能够在不实际提取所有文件的情况下验证 zip 库
- java - 无法将 ToIntBiFunction 作为参数传递给 java 中的 lambda 表达式
- json - Node.js -Firebase 服务帐户私钥不会解析
- vb.net - 如何使用代码获取远程计算机的 Windows 版本
- c# - WPF:将点击传递给所有覆盖/堆叠的控件
- javascript - iOS Safari 上的 forEach 不起作用
- r - 散点图矩阵 - 错误:未找到视口‘plot_01.panel.1.1.off.vp’”
- sql-server - 通过 SSIS 循环 3000 条记录
- google-compute-engine - 我可以从 Google Compute Engine 连接到具有水平规模的 Google Cloud SQL
- symfony - 在控制器操作中使用反序列化或 getter 和 setter