当前位置:首页 > 开发 > 移动开发 > 正文

关于ListView中异步加载图片时,图片显示错误的问题

发表于: 2011-10-26   作者:酷的飞上天空   来源:转载   浏览:
摘要: 关于ListView的优化网上有不是的文件介绍,比如: http://shazhuzhu1.iteye.com/blog/985911   也就是使用缓存convertView的形式,避免重新findViewById的时间开销。   这个地方有一种很常见的情况未说明: 当被缓存的convertView里面包含ImageView并且图片数据又是从网上获取的时候,就会出

关于ListView的优化网上有不是的文件介绍,比如:

http://shazhuzhu1.iteye.com/blog/985911

 

也就是使用缓存convertView的形式,避免重新findViewById的时间开销。

 

这个地方有一种很常见的情况未说明:

当被缓存的convertView里面包含ImageView并且图片数据又是从网上获取的时候,就会出现ListView中某个和多个位置的图片不断变换的问题。

 

原因是被缓存的convertView并不只是缓存了View的结构,而是把上个View全部内容都缓存了包括图片。这就造成每次都先显示已经出现的图片,然后才被替换为正确的图片。

 

而图片的不停变换的问题则是如下代码的原因:

		asyncImageLoader.loadDrawable(stringList.get(position).get()[1], new AsyncImageLoader.ImageCallback() {
			@Override
			public void imageLoaded(Drawable imageDrawable, String imageUrl) {
				if(imageDrawable != null){
					imageView.setImageDrawable(imageDrawable);
				}
			}
		});
 

这是一段异步加载图片的代码。

当ListView被快速滑动时,因为缓存了convertView所以如果有N此调用这个异步加载图片的方法,则此convertView的图片就会被设置N次。

当最后一次显示convertView时,其当前显示的图片则根据前几次异步加载的图片进行显示,优先加载完成的图片被优先显示。

 

解决方法:

1.不使用缓存的convertView,每次都重新inflate一个新的

2.不使用XML通过代码自己构造convertView,避免掉配置文件的解析时间

关于ListView中异步加载图片时,图片显示错误的问题

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
折腾了好多天,遇到 N 多让人崩溃无语的问题,不过今天终于有些收获了,这是实验的第一版,有些混乱
效果: 主要解决listview读取图片时界面无响应的问题,当然这个方法也可以扩展到读取数据库数据等等
问题1: 加载太多的图片很容易造成OOM异常。 一、图片缓存 方法1:使用二级缓存 ->自己维护一个
在Android所有系统自带的控件当中,ListView这个控件算是用法比较复杂的了,关键是用法复杂也就算了
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android所有系统自
这两天一直在研究转换排列之类的问题,现在正好有机会和大家讨论一下. Qt中利用OpenCV表现图片和视频
症状:用户的Excel文档插入有图片,然后在图片上添加有文字,但是文字添加好后,在编辑状态下能看到
https://github.com/ksuther/KSImageNamed-Xcode 也是非常残暴的一个功能,在开发中我们的图片名称
https://github.com/ksuther/KSImageNamed-Xcode 也是非常残暴的一个功能,在开发中我们的图片名称
在APP应用中,listview的异步加载图片方式能够带来很好的用户体验,同时也是考量程序性能的一个重要
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号