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

lan*_*nyf 2 android android-recyclerview

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

这是设计的,但有一个案例就是要调用onBindViewHolder.

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

它可以打电话

notifyDataSetChanged() 
Run Code Online (Sandbox Code Playgroud)

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

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

有什么建议吗?谢谢!

lan*_*nyf 6

我找到了

onViewAttachedToWindow(ViewHolder viewHolder)
Run Code Online (Sandbox Code Playgroud)

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