listview图片加载错乱的原理和解决方案

来源:互联网 发布:在java当中interface 编辑:程序博客网 时间:2024/06/05 10:42

加载错乱的原因

1.listView滑动时复用的ContentView,复用contentView其实是listview保证不会oom的一种策略,listview本身有一种叫做RecycleBin机制的帮助下,实现了一个生产者和消费者的模式,保证来来回回就那么几个view,移出屏幕的子View会很快被移入屏幕的数据重新利用起来 原理如下图片

这里写图片描述
2.采用异步加载图片,因为复用的性质,导致划出屏幕的view重新被利用显示出来在最新的位置上,为原来的view有图片,所以新进入屏幕的位置会有图片显示,而这张图片其实就是刚刚划出屏幕是现实的图片,这是异步又加载请求图片,返回图片后再给新位置上的view设置最新的图片,也就是造成图片错乱。

以上这两条就促成了加载图片错乱

解决方案

方案一

1.在adapter中的构造函数 获取listview
2.在getview方法中给imageview设置tag,这个tag可以为url,同时设置一个默认图片,注意设置默认图片的地方 异步请求之前,
3.在异步任务中的onPostExecute方法中重新获取ImageView,通过listview.findViewWIthtag()方法,传入对应的tag,这样就可以保证ImageView绑定的tag相对应,要判断ImageView不为空,因为在getview方法给View添加个新的tag,而老的tag会被覆盖掉,所以若拿老的tag获取IamgeView会为null的。

方案二

采用第三方加载图片的网络框架 比Volley,使用它的NetWorkImageView代替ImageView,则可以实现成不错乱。

阅读全文
0 0