【问题标题】:Updating RecyclerView item ProgressBar without calling notifyItemChanged(int) on adapter更新 RecyclerView 项目 ProgressBar 而不在适配器上调用 notifyItemChanged(int)
【发布时间】:2016-07-25 12:38:44
【问题描述】:

我正在尝试更新一个 ProgressBar,它是 RecyclerView 项目之一的一部分。我知道我可以通过两种方式做到这一点,

方法一:通过调用notifyItemChanged(position)刷新项目行

方法 2:通过在 LayoutMananger 对象上使用 findViewByPosition() 方法访问视图。

但不幸的是,它们都不适用于我的情况。

如果我使用第一个,整个项目将被重新绘制,recyclerview 的背景颜色为灰色,项目为白色,因此用户可以注意到整个项目刷新。

如果我尝试第二个,我会在滚动时遇到问题。

我想像 WhatsApp 一样更新进度。提前致谢

【问题讨论】:

  • 我也有同样的问题。我尝试存储 ViewHolder 并在进度更新时对其进行更新,但它不起作用。
  • @Vusal,看看我下面的回答,它会解决你面临的问题。

标签: android multithreading android-layout android-recyclerview android-adapter


【解决方案1】:

如果我使用第一个,整个项目会被重新绘制,recyclerview的背景颜色是灰色的,项目是白色的,所以用户可以注意到整个项目的刷新。

我也遇到了这个问题。要修复它,您需要关闭默认的项目更改动画。关闭项目更改动画后,您的 recyclerView 项目将更新而不会出现任何闪烁/跳跃,让您可以毫无问题地使用 notifyItemChanged(int)

像这样关闭默认的项目更改动画:

((SimpleItemAnimator) myRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);

【讨论】:

  • 很棒的兄弟。成就了我的一天。非常感谢。
  • @AmirZiarati,我完全同意你的评论;)
猜你喜欢
  • 2017-01-13
  • 2017-02-24
  • 2017-11-16
  • 2021-08-23
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多