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

本文探讨了RecyclerView中使用自定义View GraphView时遇到的问题,当item复用导致状态混乱,如何通过在onBindViewHolder中清除旧视图状态来解决。关键在于理解ViewHolder的复用原理并确保每次绑定数据前清理相关视图。
摘要由CSDN通过智能技术生成

     情况是: 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();
            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值