大家好,又见面了,我是全栈君。
又遇到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原来自带的图片替换掉就可以了。
作者:jason0539
博客:http://blog.csdn.net/jason0539(转载请说明出处)
推荐扫码关注公众号,看点不一样的东西
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/121317.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...