【问题标题】:How to add multiple item in PagingData of paging 3 library android?如何在分页 3 库 android 的 PagingData 中添加多个项目?
【发布时间】:2021-09-17 10:30:05
【问题描述】:

我想在当前分页数据中添加一些项目,其中已经包含项目。并显示在列表适配器中。

我已尝试插入HeaderItem。但是,在添加第二项时。标题被第二个项目取代。我想保留列表中的所有项目。并更新该列表每次我添加新项目。

              paingData
                    .insertHeaderItem(item = sampleViewEvents.comment)
                    .let {
                        getCommentList.value = it
                    }

我不想调用 API 来刷新整个列表。它可能会导致性能问题。

提前致谢

【问题讨论】:

    标签: android kotlin mvvm android-paging-library android-paging-3


    【解决方案1】:

    使用 Paging 添加/修改项目的正确方法是更新支持数据集和.invalidate(),刷新列表。这维护了单一的事实来源,并允许 Paging 了解您所做的更改。

    为了提高性能,您可以将数据缓存到中间数据库/内存层,并通过RemoteMediator 从网络加载项目。如果你这样做(如果你关心性能,你应该这样做),重新加载变得非常简单。见:https://developer.android.com/topic/libraries/architecture/paging/v3-network-db

    如果您有兴趣更新特定页面,可以关注此 FR:https://issuetracker.google.com/160232968。

    为了清楚起见,您必须通过无效循环来更新 Paging 加载的项目。目前完全不支持不这样做。这是让 Paging 了解您所做更改的唯一方法。

    【讨论】:

    • 没有invalidate()有什么办法。我不想再次调用分页数据,它应该只调用旧观察者并在列表中添加新项目。
    • 不,没有不失效的支持方法,您必须让分页知道这些更改,直到我们在issuetracker.google.com/160232968 中添加支持。简单地插入一个项目有很多问题。例如,它如何处理转换、由于 maxSize 导致的页面丢失、缓存、跨多个收集器保存(例如,配置更改)、快速滚动/跳转等。这比简单地通知适配器要复杂得多,并确保Paging 为您正确处理所有事情,您绝对需要让 Paging 知道您的更改。
    • 我还要补充一点,我完全尊重这是一个非常需要的功能,但实际上,从磁盘/内存缓存重新加载单个页面并没有那么昂贵,所以我们已经一直在优先考虑其他修复/功能。
    • @dlam 简单的数据插入非常棘手。讨论了什么样的分隔符?分隔符是锦上添花,数据插入只是一个函数。
    • @weifans 这里的部分问题是插入数据的正确方法是更新您的支持数据集。任何重新加载都会保留您的更改,这一点非常重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2021-08-04
    • 2016-11-29
    相关资源
    最近更新 更多