【问题标题】:Paging 3.0 list with new params in Kotlin在 Kotlin 中使用新参数的分页 3.0 列表
【发布时间】:2021-02-17 20:48:54
【问题描述】:

我有以下代码:

   val history: Flow<PagingData<Any>> = Pager(PagingConfig(pageSize = 10)) {
    PaginationBaseDataSource(apiService)
}.flow
    .cachedIn(viewModelScope)

这目前正在显示没有任何附加参数的项目列表。这行得通...但是现在我希望根据用户可以在前端更改的某些参数来查询此列表,假设我希望将参数 3 添加为查询。

   val history: Flow<PagingData<Any>> = Pager(PagingConfig(pageSize = 10)) {
    PaginationBaseDataSource(apiService, 3)
}.flow
    .cachedIn(viewModelScope)

问题是……我怎样才能即时设置这个查询参数?假设用户而不是 3,使用 6,然后使用 9。我该如何实现?

非常感谢

【问题讨论】:

    标签: android kotlin pagination paging flow


    【解决方案1】:

    您需要在任何参数更改时发出新的 PagingData。实现这一点的流式方法可能如下所示:

    val queryFlow = MutableStateFlow(value = 3)
    val pagingDataFlow = queryFlow.flatMapLatest { query ->
        Pager(...) { MyPagingSource(query) }.flow.cachedIn(viewModelScope)
    }
    

    【讨论】:

    • 它的工作,但如何防止列表刷新回到片段?似乎 cachedIn 不适用于此解决方案。
    • 你不能完全阻止它,因为这需要阻止生命周期破坏你的片段。确保实现 PagingSource.getRefreshKey 以允许片段从上次查看的位置恢复。在这种情况下,DiffUtil 将有助于顺利过渡到用户,因此不应该有任何“刷新”效果
    • 我的列表中的项目在刷新时会发生变化。你能帮我解决这个问题吗:stackoverflow.com/q/65643600/10109704 it about paging 3.
    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    相关资源
    最近更新 更多