您的位置:首页 > 移动开发 > Android开发

Android ListView异步加载图片错位、重复、闪烁分析以及解决方案

2015-10-30 13:25 465 查看
转自:http://blog.csdn.net/shineflowers/article/details/41744477

项目中listview使用volley加载网络图片,由于convertview的重用,导致异步加载图片会错位闪烁重复等,

所以解决方案是:holder.imageview.setImageBitmap(null);

                             holder.imageview.setTag(url);

然后在图片加载成功的onResponse中添加如下代码:

if(imageview.getTag().equals(url))

{

imageview.setImageResource(...).

}

过程:因为listview每次滑动,如果有新的item进入,就会调用一次getView,在获取到imageview之后,设为空白无图的,tag为当前显示的item的url,而且此时会调用加载图片的异步线程,而这个线程可能包括已经滑过的但是还没有结束的加载线程。

比如,listview一页显示10条item,即第一条的item对应第11条,对应第21条,1->11->21...,如果滑动过快,从1直接滑动到21,这一项复用item的imageview的tag依次是url1,url11,url21;由于当前要显示第21条数据,而第11条的数据也被加载了,如果第11条数据加载完成,但是由于此时图片地址(url11)不等于imageview的tag(url21),所以此时仍然显示为空白。当第21条数据加载完成时,符合要求,imageview设置图片为url21,解决了图片重复闪烁问题。

遗留的问题:项目中目前使用的是每次更新view都会去请求网络数据,没有缓存操作,还是要继续优化项目代码才好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息