Paging

Paging库是用来代替在ListView中查询的CursorAdapter和在RecyclerView中查询的AsyncListUtil的。

Paging库的主要组成:

  • DataSource:定义数据来源,可以根据实际情况继承其子类:
    • PageKeyedDataSource:使用当前Page保存的前后key来查找数据,例如使用当前保存的nextPage token。
    • ItemKeyedDataSource:使用当前项的数据获取下一项的数据,例如嵌套评论,使用前一项的id获取下一项的数据。
    • PositionalDataSource:从数据来源的任意点获取任意个数的数据。

Paging库可以搭配Room库使用,Room库可以帮我们自动生成能够获取PositionalDataSource实例的DataSource.Factory,例如:

@Query("select * from users WHERE age > :age order by name DESC, id ASC")
DataSource.Factory<Integer, User> usersOlderThan(int age);
  • PagedList:从DataSource中加载数据,可以设置一次加载多少数据,预加载多少数据。同时这个类也可以为其他类提醒更新,例如RecyclerView.Adapter

  • PagedListAdapter:这是一个RecyclerView.Adapter的实现类,用来从PagedList中获取数据。当加载了新页时,PagedListAdapter可以提醒RecyclerView进行更新。PagedListAdapter使用子线程进行新旧页数据的对比,提高效率。

  • 实时更新:传入DataSource.Factory,生成对应的LiveData或者Flowable实现自动更新:

    • LivePagedListBuilder

      LiveData<PagedList<Item>> pagedItems =
          LivePagedListBuilder(myDataSource, /* page size */ 50)
                  .setFetchExecutor(myNetworkExecutor)
                  .build();
    • RxPagedListBuilder

      Flowable<PagedList<Item>> pagedItems =
          RxPagedListBuilder(myDataSource, /* page size */ 50)
                  .setFetchScheduler(myNetworkScheduler)
                  .buildFlowable(BackpressureStrategy.LATEST);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值