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

又遇到ListView加载item时,多个item中的图片会错位的情况现象如下图,同一个人的头像显示的乱七八糟找了一张图,很好地说明了问题的原因问题原因就在于convertView的重用,当重用 convertView 时,最初一屏显示 7 条记录, getView 被调用 7 次,创建了 7 个 convertView,当 Item1 划出屏幕, Item8 进入屏幕时,这时没有为 Item8

大家好,又见面了,我是全栈君。

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

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

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

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

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

问题原因就在于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错误之ListView加载错位_ListView图片错位

作者:jason0539

博客:http://blog.csdn.net/jason0539(转载请说明出处)

推荐扫码关注公众号,看点不一样的东西

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121317.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • goland激活码最新【2021免费激活】

    (goland激活码最新)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月28日
  • 关于 ioctl 的 FIONREAD 參数

    关于 ioctl 的 FIONREAD 參数ioctl是用来设置硬件控制寄存器,或者读取硬件状态寄存器的数值之类的。而read,write是把数据丢入缓冲区,硬件的驱动从缓冲区读取数据一个个发送或者把接收的数据送入缓冲区。ioctl(keyFd,FIONREAD,&b)得到缓冲区里有多少字节要被读取,然后将字节数放入b里面。接下来就能够用read了。read(keyFd,&b,size…

    2022年7月23日
  • Visual C++学习笔记1:一定要注意ANSI和UNICODE差额

    Visual C++学习笔记1:一定要注意ANSI和UNICODE差额

    2022年1月16日
  • mybatis看这一篇就够了,简单全面一发入魂

    mybatis看这一篇就够了,简单全面一发入魂文章目录Mybatis概述快速入门原生开发示例基于Mapper代理的示例基于注解的示例应用场景主键返回批量查询动态SQL缓存关联查询延迟加载逆向工程PageHelper分页插件MybatisPlusMybatis概述mybatis是什么?有什么特点?它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低什么是ORM?ObjectRelationMapping,对象关系映射。对象指的是Java

    2022年7月14日
  • waitforsingleobject的作用_效率理论

    waitforsingleobject的作用_效率理论MicrosoftWindows平台中两种最常用的锁定方法为WaitForSingleObject和EnterCriticalSection。WaitForSingleObject是一个过载MicrosoftAPI,可用于检查和修改许多不同对象(如事件、作业、互斥体、进程、信号、线程或计时器)的状态。WaitForSingleObject的一个不足之处是它会始终获取内核的锁

    2022年9月19日
  • ItemDataBound里绑定数据

    ItemDataBound里绑定数据ItemDataBound里绑定数据DataRowViewdrv=(DataRowView)e.Item.DataItem;intUid=(int)drv[“UserID”];DataBinder.Eval(e.Item,”DataItem.PKIndex”);转载于:https://www.cnblogs.com/geoff/archive/2007/02/27/65…

    2022年10月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号