【问题标题】:recyclerView does not call the onBindViewHolder when scroll in the viewrecyclerView 在视图中滚动时不会调用 onBindViewHolder
【发布时间】:2015-10-02 18:30:13
【问题描述】:

这是注意到的: 启动时,视图中显示数据项索引 0、1、...、5。并看到他们调用了 onCreateViewHolder() 和 onBindViewHolder()。 然后滚动出最上面的项目,看到 onCreateViewHolder() 和 onBindViewHolder() 被调用为索引 6。 然后向下滚动以将项目索引 0 带回视图。由于它没有被回收,所以没有调用 onBindViewHolder() 。

这是设计使然,但有一个案例希望调用 onBindViewHolder。

当项目索引 0 不在视图中时,单击视图中的任何项目都想更改项目索引 0 的数据。当它滚动回视图时想要显示数据的变化。但是由于没有调用它的onBindView,所以UI中没有更新这一行的数据变化。

它可以调用

notifyDataSetChanged() 

数据改变后强制重绘列表。但是效果不好,因为view item上有图片,并且显示闪烁。

尝试使用 LayoutManager 来获取强制更新的视图。问题是什么时候最好知道索引 0 出现在 LayoutManager 的子视图中?

有什么建议吗? 谢谢!

【问题讨论】:

  • 在适配器上尝试notifyItemChanged(int position)。至于闪烁可能是使用notifyDataSetChanged()刷新整个数据集的副作用。
  • 谢谢!津巴!它可能会起作用,但它需要弄清楚适配器中的数据位置是什么,在我的情况下,源数据在后台发生更改并不直接。我喜欢使用 public void onViewAttachedToWindow(ViewHolder viewHolder) 帮助。因此,当项目滚动时,然后根据当前数据进行 ui 更新。

标签: android android-recyclerview


【解决方案1】:

我找到了

onViewAttachedToWindow(ViewHolder viewHolder)

可以用于这种情况。每当 viewHolder 显示在视口中时,它就会被调用,因此在其中根据当前数据的状态更新视图。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
相关资源
最近更新 更多