Android错误之ListView加载错位ListView图片错位

释放双眼,带上耳机,听听看~!

又遇到ListView加载item时,多个item中的图片会错位的情况

现象如下图,同一个人的头像显示的乱七八糟

 

找了一张图,很好地说明了问题的原因

问题原因就在于convertView的重用,当重用 convertView 时,最初一屏显示 7 条记录, getView 被调用 7 次,创建了 7 个 convertView,

当 Item1 划出屏幕, Item8 进入屏幕时,这时没有为 Item8 创建新的 view 实例, Item8 复用的是Item1时候创建的view,

Item8 时刷上了 Item8 的数据,但是刚开始代码是这样写的,本意是头像为空的时候不去加载,可以节省资源

String avatarUrl = user.getAvatar();
if (avatarUrl!=null&&!avatarUrl.equals("")) {
ImageLoader.getInstance().displayImage(avatarUrl, viewHolder.userLogo,
ActivityUtil.getOptions(R.drawable.user_icon_default_main));
}

如果恰好item8的头像是空字符串,就没有赋值,导致item8显示的是item1的头像,以此类推,只要遇到空头像,就会显示它所重用的convertView原来显示的图片,也就造成了图片错位。

所以后来改成了下面这样

// 头像
String avatarUrl = null;
if (user.getAvatar() != null) {
avatarUrl = user.getAvatar();
}
ImageLoader.getInstance().displayImage(avatarUrl, viewHolder.userLogo,
ActivityUtil.getOptions(R.drawable.user_icon_default_main));

不管头像为不为空,都去加载,把复用的convertView原来自带的图片替换掉就可以了。

 

 

 

 

人已赞赏
Android文章

android开发之android:process属性_application中onCreate执行多次

2020-4-14 17:01:48

Android文章

android开发之提高应用启动速度splash页面瞬间响应_避免APP启动闪白屏

2020-4-14 18:18:08

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索