ListView图片加载错位问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33344834/article/details/51942391

ListView图片加载错位

ListView加载错位的根本原因是复用了convertView 并且采用了异步加载的方式导致的。假设一个界面中最多显示7个Item,但向上滑动显示第8个Item的时候。第八个Item在内存中的位置复用了第一个Item的内存对象。
此时如果假设第8张图片加载的快而第一张图片加载的慢则会导致Item显示完第八张图片后,第一张图片下载完成,紧接着加载到第八个Item上。这就出现了ListView图片加载错位的问题。

解决方案:
最简单的解决方法就是网上说的,给 ImageView 设置一个 tag, 并预设一个图片。
当 Item1 比 Item8 图片下载的快时, 你滚下去使 Item8 可见,这时 ImageView 的 tag 被设成了
Item8 的 URL, 当 Item1 下载完时,由于 Item1 不可见现在的 tag 是 Item8 的 URL,所以不满足条件,
虽然下载下来了但不会设置到 ImageView 上, tag 标识的永远是可见 view 中图片的 URL。
关键代码如下:

// 给 ImageView 设置一个 tag
holder.img.setTag(imgUrl);
// 预设一个图片
holder.img.setImageResource(R.drawable.ic_launcher);

// 通过 tag 来防止图片错位
if (imageView.getTag() != null && imageView.getTag().equals(imageUrl)) {
    imageView.setImageBitmap(result);
}
展开阅读全文

没有更多推荐了,返回首页