ListView的adapter中的getView函数多次重复调用,导致数据显示重复的问题分析

使用ListView显示数据,其中单个item的xml文件中存在ImageView,且此ImageView的图像内容是从网络上下载下来的。实现的时候,为提供ListView的显示性能,因此在adapter的getView中复用了convertView对象。

功能实现后,测试过程中发现如下问题:

在listview显示的数据项存在翻页的情况下,有的时候滚动完成会出现图片显示错乱或者是相邻两个item的图片显示的是同一张的问题。

 

问题排查的思路:

1.最开始定位的是ImageView在加载网络图片的时候,有可能会在图片显示对象convertView中的ImageView对象出现线程时序的问题导致的重复。反复验证发现,问题并非出自网络图片的加载机制。此疑点放过。

 

2.使用比较吐的方法,将getView中的position的值打印出来,查看打印的结果发现:

即使未显示adapter中的第0个元素的情况下,也会出现有大量的日志是第0个元素调用getView的情况。

未解决重复的问题,首先要排除掉第0个元素调用了多次getView的情况。

自行定义了一下问题,一时查看代码也发现不了问题原因在哪里,谷歌一把发现:此文章有提到getView被多次调用的情况:http://my.eoe.cn/fover23/archive/4885.html

 

按照此文章的问题解决思路,将listview中的在layout文件中的layout_height="wrap_content",修改成 layout_height="match_parent"或者是"fill_parent",解决了第0个元素多次调用getView的问题。

在解决此问题的基础上在测试图片显示重复的问题:发现图片显示重复的问题也没有了。

 

回滚代码,再次验证重复图片本应该显示的位置,发现出现重复图片的情况是因为应该显示a,b项的图片结果确显示了第0项的图片。

 

问题启示:android在绘制view的过程中的长宽衡量方法与过程应该要更精确的掌握。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值