关于ConvertView错乱的问题

下午遇到一个很奇怪的问题,修改了ListView中的一个item对象的类型,执行notifyDatasetChange方法后,getView 传过来的convertView类型不对!导致View绘制时调用对象数据错误!!!

  • 现象是这样的:

在单个card中执行updateCardView方法时,更新对象类型,直接notifyDataSetChange方法,没有任何问题。
但是改为下面的写法就不行了

new Handler().post(new Runnable(){

    public void run(){
        adapter.notifyDataSetChange();
    }
);

类似的只要将notifyDataSetChange方法放在一个匿名内部类中调用都会有这个问题,例如放在Animation的onAnimationEnd的listener中也会有次问题。

后来发现一个规律,就是改变 item 的obj类型和 notifyDataSetChange在一个代码块,也就是一个方法体内,是没有问题的,但是分开写,就是item 的 obj改变类型在一个方法体内,notifyDataSetChange放在一个匿名内部类中调用就会有上述问题。

  • 最后的解决方法是:
    把obj数据类型的改变和notifyDataSetChange都放在匿名内部类中调用。即晚些改变item对应obj的数据类型。

  • 但是问题又来了:
    在我们工程中的无图模式情况下,滑动中再次出现了ConvertView类型错误问题,一时找不到问题原因。

最终的解决办法:

给ConvertView设置tag,将item对应obj的type类型赋给convertView,在复用convertView的时候,先判断其tag类型,若类型不对,则创建新的convertView,暂时用此方法解决了问题。

但还是不明白convertView为什么会类型错误!!!!

getItemViewType都被调用了,并且position和类型都是匹配对应的,为什么convertView类型系统会传错误呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值