在视图中滚动时,recyclerView不会调用onBindViewHolder

时间:2015-10-02 18:30:14

标签: android android-recyclerview

这是注意到的: 启动时,数据项索引0,1,...,5将显示在视图中。并且看到onCreateViewHolder()和onBindViewHolder()被调用了。 然后滚动出顶部项目,看到为索引6调用onCreateViewHolder()和onBindViewHolder()。 然后向下滚动以将项目索引0恢复到视图中。因为它没有被回收所以没有调用onBindViewHolder()。

这是设计的,但是有一个案例会想要调用onBindViewHolder。

当项目索引0超出视图,并单击视图中的任何项目时,将更改项目索引0的数据。当它滚动回到视图时,想要显示数据的变化。但由于未调用onBindView,因此不会在UI中更新此行的数据更改。

可以打电话

notifyDataSetChanged() 

数据更改后强制重绘列表。但结果并不好,因为视图项上有图像并显示闪烁。

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

有什么建议吗? 谢谢!

1 个答案:

答案 0 :(得分:6)

我找到了

onViewAttachedToWindow(ViewHolder viewHolder)

可用于此案例。只要在视口中显示viewHolder,就会调用它,因此在其中根据当前数据的状态更新视图。