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图片错位

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Java网络编程:TCP的socket编程

    Java网络编程:TCP的socket编程一、Java中的网络编程协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP协议族有IP协议、TCP协议和UDP协议。现在TCP/IP协议族中的主要socket类型为流套接字(使用TCP协议)和数据报套接字(使用UDP协议)。TCP协议提供面向连接的服务,通过它建立的是可靠地连接。Java为TCP协议提供了两个类:So

  • java的格式输入语句是_java输入输出语句是什么「建议收藏」

    java的格式输入语句是_java输入输出语句是什么「建议收藏」对于经常上机刷题的来说,首先得解决输入输出方法,Java的输入输出流在Java学习过程的后面部分才会接触,但是我们可以掌握一些简单的,常用的输入输出方法输出流java常用的输出语句有下面三种:System.out.println();//换行打印,输出之后会自动换行System.out.print();//不换行打印System.out.printf();//按格式输出输出示例publiccla…

  • 搭建邮件服务器 dns,搭建DNS服务器+邮件服务器[通俗易懂]

    一·搭建DNS服务器试验要求:完成DNS的正反向解析试验前准备:服务器192.168.203.201server1.example.com客户机192.168.203.202server2.example.com192.168.203.203database.example.com修改DNSnmclicmodifyeno16777736ipv4.dns8.8.8.8system…

  • 快递查询API接口集成,有需要的可以直接用

    快递查询API接口集成,有需要的可以直接用

    2021年10月26日
  • spring源码搭建_手赚网最新源码

    spring源码搭建_手赚网最新源码目录楔子Spring源码下载github下载gitee下载将项目导入开发工具选择版本为5.2.x修改IDEA中Gradle配置如下确认IDEA中的Kotlin是否生效添加阿里云镜像Reload项目耐心等待编译完成新建Gradle模块楔子学习Spring源码有两种方式,一种是直接引入Spring依赖,读静态源码或者调试;一种是自己编译Spring源码。小七觉得如果想要更好的理解Spring源码,自己编译Spring源码是很有必要的,一方面我们可以修改源码,方便调试验证我

  • 【idea】推荐一个idea翻译插件:Translation「建议收藏」

    【idea】推荐一个idea翻译插件:Translation「建议收藏」打开settings-plugins,打开Browserepositories(如图):搜索”Translation”,往下找,找到图中插件install即可(我是已经安装了的)我的插件版本现在是支持谷歌、有道、百度三种翻译,其中有道和百度的需要填写应用id及secret等才能用,这个需要到有道智云(百度的没有试过)申请。使用很简单:选中单词或者段落ctrl+shift+…

发表回复

您的电子邮箱地址不会被公开。

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