将LiveData <PagedList <X >>映射到LiveData <PagedList <Y >>

Chr*_*ris 14 android android-architecture-components

我需要将域对象映射到UI对象并使用实时分页列表进行显示.

我试图映射LiveData<PagedList<X>>LiveData<PagedList<Y>>并映射PositionalDataSource<X>PositionalDataSource<Y>,但由于包私有和私有限制,如果不将我的代码放在android.arch.paging包中并使用反射或使用修改版本的分页库,这些似乎都是不可能的.

有没有人知道如何在不诉诸这种不良方法的情况下做到这一点?

(请注意,如果分页库API使用接口而不是抽象基类,这将不会成为问题 - 这将允许包装任何分页列表/数据源并添加适当的映射.)

edy*_*edy 14

DataSource和DataSource.Factory有mapBy()mapPageBy(),在这种情况下可以帮助你.要小心,因为这两个会限制"Y" - 结果列表的大小.

如果结果的大小与原始列表的大小不同,则DataSource将抛出异常.


小智 6

对我来说以下工作:

  val dataSourceFactory = 
         cache.getDataSourceFactory(params)
              .map {
                   convertXToY(it)
                  }

Run Code Online (Sandbox Code Playgroud)