【发布时间】:2021-02-23 13:44:10
【问题描述】:
我正在尝试使用DataSource 实现以及PagedAdapter 在Android 上实现分页。
最初,要求是在内存中有一个完整的列表(不使用 RoomDB),我想在用户滚动时对该数据进行移动“视图” - 即将它提供给页面中的适配器。我通过使用PositionalDataSource 实现了这一点。
但是,现在我有一个新要求。原始完整列表中的一些项目实际上是“加载”项目(即微调器),我需要获取这些单元格以块的形式表示的数据。这些块的大小未确定。当一个块加载时,“正在加载”项应该在列表中向下移动,并且加载的块被插入到“正在加载”项所在的位置。这应该一直持续到“正在加载”项所代表的所有块都已加载完毕,此时应删除列表末尾的“正在加载”项。
这意味着,我的底层数据源实际上会随着用户滚动列表而动态增长。我认为这意味着 PositionalDataSource 不是用作源文档状态的正确数据源类型:
* Position-based data loader for a fixed-size, countable data set, supporting fixed-size loads at
* arbitrary page positions.
强调fixed-size 和countable - 显然我的数据集不是固定大小的(因此也是不可数的)。
我查看了DataSource 的其他实现,并认为我找到了正确的; ItemKeyedDataSource。我的每个项目确实都有一个唯一的键,并且此类的源文档指出:
* Incremental data loader for paging keyed content, where loaded content uses previously loaded
* items as input to future loads.
这对我来说表明我可以将它用于我所需的目的。 IE。当它需要在一个范围内加载具有给定键的项目(也恰好是“加载”项目)时,它可以使用加载项目数据来确定要加载的内容。
但是,我在实际实现时遇到了一些困难,因为官方文档没有给出任何真实的示例用法,并且示例代码的链接假定使用 RoomDB 或改造,这两种方法都不是我需要。
谁能帮助我概述一下这个 DataSource 应该如何在概念上和/或在代码示例中使用需要动态增长的内存数据集?
我意识到这很模糊,我今天早上才开始学习这门课,我很挣扎。
【问题讨论】: