【问题标题】:how to paginate data using Room and RxJava?如何使用 Room 和 RxJava 对数据进行分页?
【发布时间】:2020-12-31 14:20:24
【问题描述】:

sopuse 我的 Room DAO 中有一个函数,如下所示:

@Query("SELECT * FROM cached_tbl ORDER BY id")
    fun getAll(): Flowable<List<Item>>

这将返回数据库中的所有项目 但我不希望这样,我希望对数据进行分页并以小块形式发出。我希望按需从数据库中加载数据,例如每页 100 个项目。有没有办法做到这一点?

【问题讨论】:

    标签: android pagination rx-java android-room


    【解决方案1】:

    Jetpack 有一个名为 Paging 的库,您可能会对它感兴趣。使用 Room 的好处是它还集成了 Paging,因此设置过程如下:

    @Query("SELECT * FROM cached_tbl ORDER BY id")
    fun getAll(): PagingSource<Int, Item>
    

    视图模型

    val pager = Pager(PagingConfig(pageSize)) { dao.getAll() }
      .cachedIn(viewModelScope)
    

    活动

    lifecycleScope.launch {
      pager.flow.collectLatest {
        PagingDataAdapter.submtiData(it)
      }
    }
    

    您可以在这里阅读更多内容:https://developer.android.com/topic/libraries/architecture/paging/v3-overview,包括如何设置分层源、转换等。

    【讨论】:

    • 感谢您的回答。但图书馆不是我要找的东西
    • 如果您想了解需要连接的内容,也可以浏览 cs.android.com 中的源代码,但它本质上是通过在适配器请求按位置绑定项目时触发页面加载来工作的,并发送正确的列表更新回调。
    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    相关资源
    最近更新 更多