您的位置:首页 > 其它

listView或者gridView异步加载图片错乱问题

2017-08-04 11:24 267 查看


比如一页正常显示7个item ,当向下滑动一个条目的时候,由于listView的复用原则,如果不异步加载,虽然第一块和第八块指向的是同一个View,但是此时已经刷上了 第8个item 的数据, 而此时的第一块数据 也显示的是第八块数据,只是我们看不到而已,因为此时第一块和第八块指向的是同一块内存。
但是当出现异步加载的时候,如果2个item加载图片 有快有慢 ,所以,慢的一块没加载出来  会显示快的一块,因为他们指向的是同一块内存,所以当设置tag的时候,tag的标示永远是可见的View的url 

-------以下是设置viewHolder-----------代码仅供参考--------
1.创建静态类Viewholder 并声明控件
比如:
//空参构造
static class ViewHolder {
ImageView image;
}

2.在listView的getView 方法中 创建这个viewholder 对象
并且判断convertView 是否为空,如果为空,填充想要展示的item布局,
并且为viewholder 中的控件赋值
3.然后为convertView设置tag 
//空参构造
ViewHolder holder = null;
String url = getItem(position).toString();
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.item, null);

holder.image = (ImageView) convertView.findViewById(R.id.pic);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.image.setImageBitmap(BitmapFactory.decodeFile(url));


----以下是异步加载图片 通过判断tag的方式
// 给 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);
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: