这是我注意到的问题:
当开始时,数据项索引0、1、...、5在视图中显示。并且看到它们的onCreateViewHolder()和onBindViewHolder()被调用。
然后滚动出顶部项,并看到onCreateViewHolder()和onBindViewHolder()为索引6调用。
然后向下滚动,将项目索引0带回视图中。由于它没有被回收,所以不会调用onBindViewHolder()。
这是设计上的考虑,但有一种情况希望调用onBindViewHolder()。
当项索引0超出视图范围,并点击视图中的任何项时,希望更改项索引0的数据。当它滚动回视图时,希望显示数据的更改。但由于它的onBindView没有被调用,因此此行的数据更改未在UI中更新。
可以调用
这是设计上的考虑,但有一种情况希望调用onBindViewHolder()。
当项索引0超出视图范围,并点击视图中的任何项时,希望更改项索引0的数据。当它滚动回视图时,希望显示数据的更改。但由于它的onBindView没有被调用,因此此行的数据更改未在UI中更新。
可以调用
notifyDataSetChanged()
在数据更改后强制重新绘制列表。但结果并不好,因为视图项上有图像并且会闪烁。
尝试使用LayoutManager来获取视图以强制更新。问题是最佳时间知道索引0何时显示在LayoutManager的子视图中?
有什么建议吗? 谢谢!
notifyItemChanged(int position)
。至于闪烁的问题,可能是使用notifyDataSetChanged()
刷新整个数据集时的副作用。 - cziemba