Android: viewHolder 复用错乱导致的显示错误

  • Post author:
  • Post category:其他


情况是: recyclerview item里有个自定义View组件GraphView,负责显示速度曲线,假设有10条item,在切换一下底部bottombar再切换回来,发现第一条item的曲线变了,变成了第3个数据源的速度曲线。同样的操作再切一遍,发现曲线又变了,在适配正确的第一条数据源的情况下,却显示成了其他数据的速度曲线。

根本原因是: recyclerView item的布局经过动态 inflate 加载,因为复用的ViewHolder的View组件保留了之前的状态,并且重新调用OnBindViewHolder,你又没有对状态进行还原,就会出现 viewHolder 复用错乱导致的显示错误。(参考:

RecyclerView 动态添加Linearlayout布局导致复用混乱问题_方长Orz的博客-CSDN博客

故解决方案如下,在onBindViewHolder中添加如下代码:

    if (binding.graphView != null) {
                binding.graphView.removeAllViews();
            }



版权声明:本文为Crystal_xing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。