如何从Android分页组件中的PagedListAdapter中删除项目

pha*_*nlu 11 android android-architecture-components android-paging

我使用Paging with Retrofit从REST API加载Notifications数据列表.

当我按下通知项目的删除按钮时,我调用删除API删除它.PagedListAdapter删除API响应成功后删除它的正确方法是什么?PagedListPagedListAdapter不支持通过索引或对象删除项目.

我试着打电话DataSource.validate()但它从开始重新加载,而不是从当前页面重新加载.

jay*_*917 5

根据官方文件

如果您有更细致的更新信号,例如网络API发出对列表中单个项目的更新信号,则建议将数据从网络加载到内存中。然后通过包装内存中快照的数据源将数据提供给PagedList。每次内存中的副本更改时,都将使先前的数据源无效,并且可以创建一个新的包装快照的新状态。

PagedList是不可变的,因此您无法对其进行任何修改。您需要做的是:

  1. 维护一个可变列表,L将您的服务器响应存储在自定义中DataSource
  2. 传递给LoadInitialCallback.onResult()(现在PagedList支持L)。
  3. 做任何你想做的事L
  4. 调用DataSource.invalidate()以与新数据源配对,因此DataSource.loadInitial()被调用以反映步骤3中的更改。

  • 这不是一个好主意。让它显示几页后,从列表中删除一些项,然后调用DataSource.invalidate。您将看到recyclerview显示第一页,并从旧的原始位置滚动到头部位置,这是您不需要的。 (4认同)
  • 这确实有效,但是它会在invalidate()之后重载所有的recyclerview。 (3认同)