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


相关推荐

  • Mac安装brew,安装wget「建议收藏」

    Mac安装brew,安装wget「建议收藏」安装brewadmindeMacBook-Pro:wget-1.13.4admin$/usr/bin/ruby-e”$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)”==>Thisscriptwillinstall:/usr/local/bin/brew/…

    2022年6月1日
    46
  • QT QTcpSocket「建议收藏」

    QT QTcpSocket「建议收藏」QTcpSocket类提供TCP套接字。TCP(传输控制协议)是一种可靠的、面向流的、面向连接的传输协议。它特别适合于数据的连续传输。QTcpSocket是QAbstractSocket的一个方便的子类,它允许您建立TCP连接和传输数据流。有关详细信息,请参见QAbstractSocket文档。注意:TCP套接字不能在QIODevice::Unbuffered模式下打开。请参见QTcpServer、QUdpSocket、QNetworkAccessManager、Fortune服务器示例、Fortu

    2022年9月10日
    3
  • c++ decltype用法_c++ typedef struct

    c++ decltype用法_c++ typedef structC++decltypeflyfish返回类型后置编译器通过初始化去顶auto代表的类型,不需要定义变量仅希望得到类型使用decltype使用方式1类似autostd::vectorv;typedefdecltype(v.begin())it;for(iti=v.begin();i!=v.end();i++){}//或者for

    2022年9月10日
    5
  • java nio 详_java NIO 详解

    java nio 详_java NIO 详解JavaNIO(NewIO)是从Java1.4版本开始引入的一个新的IOAPI,可以替代标准的JavaIOAPI。本系列教程将有助于你学习和理解JavaNIO。JavaNIO提供了与标准IO不同的IO工作方式:ChannelsandBuffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总…

    2022年7月7日
    20
  • hdfs性能调优_spark写入hdfs文件太慢

    hdfs性能调优_spark写入hdfs文件太慢在集群的客户端使用hdf命令去查询的时候,出现一个响应特别慢的情况。同样的两个客户端节点,一个秒回,但是另一个可能需要数十秒才能响应。最终发现响应特别慢的原因是因为没有将hostname配置到/etc/hosts文件中…

    2022年9月26日
    3
  • mina框架是什么意思(个人年度总结框架)

    参考:http://xinsync.xju.edu.cn/index.php/archives/category/prglang/java/mina简单介绍:MINA框架是对java的NIO包的一个封装,简化了NIO程序开发的难度,封装了很多底层的细节,然开发者把精力集中到业务逻辑上来,最近做了一个相关的项目,为了备忘对MINA做一个总结。下面这个start方法用来初始化MINA:priv…

    2022年4月16日
    48

发表回复

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

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