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

本文讨论了Android ListView在使用缓存convertView时可能出现的图片加载错误问题,特别是当图片来源于网络时。文章分析了问题产生的原因,并提供了两种解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于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,避免掉配置文件的解析时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值