`
酷的飞上天空
  • 浏览: 521764 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

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

 
阅读更多

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

0
0
分享到:
评论
3 楼 fyc0109 2013-03-07  
那就是说两种方法原理都是一样的,只不过第二种是第一种的优化.我总觉得还是不是太好!
2 楼 酷的飞上天空 2012-05-25  
changliangno1 写道
勉强接受第二种做法,而且是只new imageview,然后再添加到itemView中去。

我自己的做法是自定义imageView再其中添加刷新drawable的方法


可以使用给缓存的view设置tag的方式解决
参考http://314858770.iteye.com/blog/1442272
1 楼 changliangno1 2012-05-22  
勉强接受第二种做法,而且是只new imageview,然后再添加到itemView中去。

我自己的做法是自定义imageView再其中添加刷新drawable的方法

相关推荐

    ListView异步加载图片

    为了解决这个问题,我们需要实现ListView的异步加载图片功能。本篇文章将详细介绍如何通过软引用缓存图片,实现高效、流畅的异步加载机制。 一、异步加载原理 异步加载的基本思想是将耗时的操作(如网络请求和图片...

    ListView的异步加载图片并缓存

    因此,"ListView的异步加载图片并缓存"是解决这一问题的关键技术。 异步加载图片的主要目的是将耗时的操作(如网络请求、图片解码)放在后台线程,以避免阻塞UI线程,提高用户体验。以下是一些关键知识点: 1. **...

    Android实现ListView异步加载图片

    "Android实现ListView异步加载图片" Android 实现 ListView 异步加载图片是一种常见的技术,旨在提高应用程序的性能和用户体验。本文将详细介绍 Android 中实现 ListView 异步加载图片的方法,并对相关的技术概念...

    Android Listview异步加载图片

    然而,当ListView中的每个项都包含图片时,如果直接在主线程中加载图片,会导致UI卡顿,用户体验下降。为了解决这个问题,我们需要实现ListView的图片异步加载。本文将深入探讨Android ListView中异步加载图片的策略...

    listview item 异步加载数据图片

    在Android开发中,ListView是一种常用的UI控件,用于展示大量可滚动的数据列表。然而,当ListView中的每个item都需要加载图片时,...通过分析这些代码,开发者可以更好地理解和应用ListView异步加载数据图片的技术。

    listview 异步加载网络图片

    本文将深入探讨如何在ListView中实现异步加载网络图片,提升应用的性能和用户体验。 1. **异步加载原理**:异步加载的核心思想是将耗时的操作(如网络请求和图片解码)放到后台线程执行,而不是在主线程(UI线程)...

    listview 图片异步加载 图片错位 软引用 getView调用次数 convertView重用

    ListView异步加载图片,图片错位问题解决方案 * 问题分析:我们在使用AsyncTask异步下载图片的时候,经常会用到convertView的重用,一般情况下,滑动后第一个可见的元素(我们给它命个名,称为A1)和 * listview...

    android中ListView异步加载图片时的图片错位问题解决方案

    通过以上方法,我们可以有效地解决Android ListView中异步加载图片时出现的图片错位问题,提供流畅且高效的用户体验。在实际开发中,应根据项目的具体需求,灵活运用各种策略,实现最佳的图片加载效果。

    android listView 异步加载图片

    - **图片错误图标**:在图片加载失败时显示的图标。 在实际使用中,我们还需要考虑图片的缩放处理,以适应不同的屏幕尺寸和ListView项的大小,以及图片质量的优化,防止内存溢出。 总的来说,“android listView ...

    Android开发之listview优化+图片异步加载缓存+避免图片显示闪烁

    本篇将深入探讨如何对ListView进行优化,以及如何实现图片的异步加载和缓存策略,以避免这些问题。 **1. ListView优化** ListView的优化主要涉及以下几个方面: 1.1 **convertView复用机制**:ListView的Adapter...

    android listview异步加载图片实例(线程池+数据库+本地保存)

    本实例将详细讲解如何实现“Android ListView异步加载图片”,结合线程池、数据库和本地保存来优化性能。 首先,我们需要理解异步加载的概念。在Android中,由于主线程负责用户界面的更新,因此不应在主线程中执行...

    listview异步加载图片

    本文将详细讲解如何在ListView中实现异步加载图片以及三级缓存的原理。 ### 一、异步加载图片的必要性 1. **避免阻塞主线程**:Android应用的UI更新必须在主线程进行,而图片加载通常需要较长的时间,如果在主线程...

    Android中ListView全面完美的网络图片的异步加载

    "Android中ListView全面完美的网络图片异步加载"这一主题正是解决这些问题的关键。 首先,我们需要理解异步加载的概念。异步加载意味着在后台线程处理耗时操作,如下载和解码图片,而不是在主线程中执行,这样可以...

    androidListView图片异步加载

    本教程将深入探讨如何在Android中使用自定义方法实现ListView的图片异步加载,特别适合初学者学习。 首先,我们需要理解异步加载的基本概念。异步加载是指在主线程之外创建一个新的工作线程来执行耗时的操作,如...

    listview 异步加载图片

    因此,"ListView异步加载图片"是解决这一问题的关键技术。本文将详细介绍如何在ListView中实现图片的异步加载,提升用户体验。 1. **AsyncTask**:Android提供了异步处理任务的工具类AsyncTask,可以用来加载图片。...

Global site tag (gtag.js) - Google Analytics