【发布时间】: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