关于通过设置imageview的tag避免listview图片错位的疑问

luqing414 luqing414 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
listview图片有可能出现错位,举一个应用场景,界面可以显示7条记录,都是异步从网络加载图片,当第1条记录对应的图片还没显示,而就往下滑动,导致第8条记录出现,而第8条记录的布局重用了第1条记录的,而且第8条对应的图片加载比第1条还快,所以出现了最下面的一条记录先显示第8张图片,再显示第1张图片的情况,出现这种情况的原因是重用了convertView,网上也有解决方案,就是说给imageview设置tag,完后进行比较,但是我看的几个帖子,要么只有文字描述,要么就是代码不全,要么就是东扯西拉没说到重点,具体要怎么比较并不清楚,我写了一个伪代码:


public class MyAdapter extends BaseAdapter {
private List<String> values;
private LayoutInflater mInflater;

public MyAdapter(Context context, List<String> values) {
this.values = values;
mInflater = LayoutInflater.from(context);
}

@Override
public int getCount() {
return values.size();
}

@Override
public Object getItem(int position) {
return values.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
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));

return convertView;
}

static class ViewHolder {
ImageView image;
}
}


其中假设holder.image.setImageBitmap(BitmapFactory.decodeFile(url));这一句就能异步从网络加载图片(只是假设,实际肯定不行,但这不是我想知道的重点),我想问的是,怎么设置tag并比较可以避免上面那种场景的出现呢,我想过用

if (holder.image.getTag() == url) {
holder.image.setImageBitmap(BitmapFactory.decodeFile(url));
}

holder.image.setTag(url);

或者反之,但仔细一想都不行,请知道的人指点下
...全文

相关推荐

评论 18
收藏 已收藏
分享
返回顶部
luqing414
Android 80,490 成员 91,375 内容