ListView 图片错位

只愿长相守 提交于 2020-02-26 02:57:37
图片错位问题的本质源于我们的 listview 使用了缓存 convertView,假设一 种场景,一个 listview 一屏显示九个 item,那么在拉出第十个 item 的时候,事 实上该 item 是重复使用了第一个 item,也就是说在第一个 item 从网络中下载 图片并最终要显示的时候,其实该 item 已经不在当前显示区域内了,此时显示
的后果将可能在第十个 item 上输出图像,这就导致了图片错位的问题。

解决方案一  使用findViewWithTag

在getView()方法里面imageView.setTag(url);

在网络请求到 BitmapDrawable

ImageView imageView = (ImageView) mListView.findViewWithTag(imageUrl);    

if (imageView != null && bitmapDrawable != null) {    

    imageView.setImageDrawable(bitmapDrawable);    

解决方案二  双向使用弱引用关联

这种解决方案的本质是要让ImageView和BitmapWorkerTask之间建立一个双向关联,互相持有对方的引用,BitmapWorkerTask里面用ImageView的引用获得BitmapWorkerTask的引用,判断是否等于this,是就返回ImageView,否者返回null。

解决方案三  使用NetworkImageView(Volley当中提供的控件

每个NetworkImageView中都会对应一个ImageContainer,从ImageContainer对象中获取封装的图片请求地址,并拿来和当前的请求地址做对比,如果相同的话说明这是一条重复的请求,就直接return掉,如果不同的话就调用cancelRequest()方法将请求取消掉,然后将图片设置为默认图片并重新发起请求。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!