【问题标题】:How to remove dropped items from RecyclerView in Android Pager 3?如何从 Android Pager 3 中的 RecyclerView 中删除丢弃的项目?
【发布时间】:2020-07-15 07:31:20
【问题描述】:

我正在使用Android Paging 3 library。在我的测试配置中,它有一个PagingConfigpageSize = 10maxSize = 40。当我向下滚动配置的RecyclerView 时,一切都按预期工作——当我接近列表的下限时,会加载新的数据部分。当我们加载了太多数据项(超过配置的maxSize)时,它开始被删除 - 这是预期的行为。但是当我开始向上滚动时,有空的视图持有者没有这些被丢弃项目的任何数据。这意味着适配器项目的数量在清理PagingData 时不会改变。如何从PagingDataAdapter 中删除这些丢弃的项目(等于null)?有没有这方面的API?如果应该自动完成,那么我对 Paging 3 的配置可能是错误的。在这种情况下,我将提供代码。

【问题讨论】:

  • 看起来我的配置是正确的——如果我们为它配置maxSize,Paging 3 库的官方代码实验室也会这样做(丢弃项目的空数据模型)......
  • 架构组件样本仓库中的 PagingWithNetworkSample 也是如此。看起来我现在能做的最好的事情是禁用maxSize 限制。
  • 看起来retry() 中的PagingDataAdapter 方法也不起作用。当我在页面获取失败后调用它时没有反应。现在将使用refresh()...

标签: android android-paging android-paging-library


【解决方案1】:

你有PagingConfig.enablePlaceholders 设置吗?

禁用占位符将阻止 Paging 使用 null 项为尚未加载的页面填充列表。

PagingConfig.enablePlaceholders 的默认值为true

编辑:虽然上述评论仍然有效,因为占位符表示为null 项目,但这实际上是 alpha02 中的一个错误,该错误已得到修复,并将与 alpha03 一起消失。

【讨论】:

  • 这个选项在我的PagingConfig中设置为false
  • 此外,将 PagingConfig.enablePlaceholders 设置为 false 并没有改变 PagingWithNetworkSample 中描述的行为 - 现在检查
  • 重现步骤:获取 architecture-components-samples repo -> 打开 PagingWithNetworkSample 项目 -> 在 InMemoryByPageKeyRepository 中设置 maxSize = 90, enablePlaceholders = false -> 运行应用程序,将 90 多个项目滚动到底部 ->再次滚动到顶部 - 有空项目处于永远“加载”状态
  • 谢谢,如果你说的是真的,这是 Paging 端的一个错误。我试图在这里重现该问题,但没有成功:github.com/dlam/architecture-components-samples/tree/so/… 我正在记录适配器在每次附加后可以呈现的第一项的结果。不管怎样,我已经在这里提交了一个问题:issuetracker.google.com/161475289 来跟踪这方面的进展,如果你可以上传一个复制品,我很乐意重新打开!
  • 我的错误 - 尽管仍然需要禁用占位符来删除空值(空值是占位符),但我意识到这实际上是我很久以前修复的 alpha02 中的一个错误。它将与 alpha03 一起消失 - android-review.googlesource.com/c/platform/frameworks/support/+/…
猜你喜欢
  • 2023-02-23
  • 1970-01-01
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多