当前位置: 首页 > 知识库问答 >
问题:

具有干净架构的Android分页库

澹台权
2023-03-14
  • 主模块(App)
  • 数据模块(具有网络和数据库依赖性的Android模块)
  • 域模块(纯Kotlin模块)

为了引入分页,我不得不将PagedList 类视为域类。(IMO并不是一个可怕的想法,因为最终是一个列表,并且数据源是抽象的)

因此,在域层中,我可以有一个类似的repository:

interface ItemRepository {
    fun getItems():PagedList<Item>
}
class ItemRepositoryImpl: ItemRepositoy(private val factory:ItemDataSourceFavtory) {
    fun getItems():PagedList<Item> {

  val pageConfigurations = PagedList.Config.Builder()
            .setPageSize(10)
            .setInitialLoadSizeHint(15)
            .setPrefetchDistance(5)
            .setEnablePlaceholders(false)
            .build()

    return RxPagedListBuilder(locationDataSourceFactory, pageConfigurations)
            .setInitialLoadKey(1)
            .buildObservable()
}

Im awareDatasourceFactory具有MapMapBypage方法,但工厂驻留在数据层中。我的Viewmodel使用来自模型层的数据,在本例中,模型层是pagedlist,据我所知,分页列表不支持映射。

那么在这种情况下应该做什么呢?

共有1个答案

朱翔
2023-03-14

您不能将PagedList映射到表示模型,因为PagedListAdapter需要PagedList来加载下一页/上一页。

PagedList有两个主要功能:第一,它是一个数据结构,用来保存分页(部分存在和部分不存在)的项目的列表。使用snapshot()可以很容易地获取当前项目,将域模型映射到表示模型中,并传递给ListAdapter以显示项目列表。

其次,当需要更多页面时,它必须警告datasourcePagedListAdapter接收PagedList,绑定项时,它根据PagedListLoadAround()方法检测何时需要新页。

 类似资料:
  • 我能够从赫尔辛基MOOC课程中弄清楚这个项目,但我认为有一种更干净、更容易阅读的方式来写它。目标是打印出:

  • 问题内容: 我找不到确切的答案。据我所知,类中不能有多个功能。那么我该如何解决这个问题呢? 假设我有一个Cheese用属性调用的类。我如何有两种创建奶酪对象的方式… 有很多这样的漏洞: 还有一个不带参数而只是随机化属性的参数: 我只能想到一种执行此操作的方法,但这似乎很笨拙: 你说什么?还有另一种方法吗? 问题答案: 对于“魔术”值,实际上要好得多: 现在,如果你想完全自由地添加更多参数: 为了更

  • TLDR:由于UserNotFound错误(未找到的用户来自旧安装),我无法使用空数据目录启动Mongo的干净安装(从ZIP)。 更详细地说:我最初的Mongo数据库运行良好。出于测试目的,我移动了当前的数据目录,并创建了一个新目录。所以我停止了运行Windows服务 创建一个新的数据目录并尝试在noauth模式下启动一个新的MongoDB 麻烦就从这里开始了:MongoDB试图从我的旧数据库中连

  • 问题内容: 我已经使用以下命令从Docker文件构建了一个Docker映像。 当我尝试使用同一命令重建它时,它正在使用构建缓存,例如: 缓存显示已安装Aerospike。但是,我在从该图像生成的容器中找不到它,因此我想在不使用缓存的情况下重建该图像。如何强制Docker在没有缓存的情况下重建干净的映像? 问题答案: 有一个选项: 在较旧的Docker版本中,您需要通过,但情况不再如此。

  • 我是Android Studio的新手,所以我面临一些问题。我正在寻找一种如何干净地项目的方法。 在Eclipse中,我会做<代码>项目-

  • 问题内容: 当您使用很多术语时,以下语句看起来非常混乱: 有没有一种更干净的方式来执行相同的操作,我希望我的代码尽可能可读。 注意:x,y和z只是任何长度的任何字符串的占位符。如果条件中的每个条件进行或运算,则此处可能有20个长度可变的字符串术语 问题答案: Set stuff = new HashSet (); stuff.add(“x”); stuff.add(“y”); stuff.add(