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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MySQL字符串分割_c语言中如何截取字符串

    MySQL字符串分割_c语言中如何截取字符串有分隔符的字符串拆分题目要求数据库中num字段值为:实现的效果:需要将一行数据变成多行实现的SQLSELECTSUBSTRING_INDEX(SUBSTRING_INDEX(‘7654,7698,7782,7788′,’,’,help_topic_id+1),’,’,-1)ASnumFROMmysql.help_topic…

    2022年10月7日
    0
  • Google虚拟机_免费google账号

    Google虚拟机_免费google账号 GoogleAppEngine是Google推出的免费虚拟主机空间,其实这比一般虚拟主机强悍的多,你可以利用GoogleAppEngine工具来开发网站或制作网络应用程序,Google会在自己的庞大服务器集群上为你提供空间、带宽、资源等。目前GoogleAppEngine为每个用户提供10个Application(简称App),每个App有500M免费空间,每个App限制100

    2022年10月15日
    0
  • import javax.servlet.http.HttpSession;异常

    import javax.servlet.http.HttpSession;异常

    2021年7月18日
    89
  • js调试console.log使用总结图解

    js调试console.log使用总结图解一实例打印字符串和对象;可展开对象查看内部情况;看一下console对象本身的定义情况;输出对象情况;utag对象所在文件;输出对象;二Console.log总结1如果你js没

    2022年7月1日
    24
  • sql格式化工具-SQL Pretty Printer

    sql格式化工具-SQL Pretty Printersql格式化工具-SQLPrettyPrinter导言使用主要功能:其他功能:RenameTable和RenameColumnToC#(ToVB.NET)C#ToSQL(VB.NETToSQL)SQLFormatterOptions导言写SQL语句或者脚本时,很容易出现凌乱的情况,这里推荐一款很方便的SQLServer插件:SQLPrettyPrinter…

    2022年10月22日
    0
  • C#进程间通信的方式_进程间高级通信方式可分为三种

    C#进程间通信的方式_进程间高级通信方式可分为三种进程间通信(IPC,InterProcessCommunication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中Socket和Streams支持不同主机上的两个进程IPC。以Linux中的C语言编程为例。一、管道管道,通常指无名管道,是UNIX系统IPC最古老的形式。1、特点:它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。它只能用于具有亲缘关系的进程之间的通信

    2022年10月11日
    0

发表回复

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

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