关于ListView异步加载图片导致图片显示混乱以及ListView ...
2014-05-16 17:25
399 查看
前面看到有帖子中有人使用notifyDataSetChanged()来解决ListView中异步加载图片第一张图片显示错误问题。首先在数据源没有变化的情况下没有必要使用notifyDataSetChanged(),会导致调用requestLayout()重绘当前界面的列,就是重新走getView().所以notifyDataSetChanged()在图片都已下载缓存完的情况下正常显示了,但是因为重新刷新界面了导致了效率变低。其实要知道ListView图片混乱都是因为重用了ConvertView,但这个是ListView性能的关键。我们为什么说建议在ListView中使用ViewHolder,按我的理解其一是能够保存ConvertView中各个View的引用,使得不需要每次都findViewById严重影响效率,其二是我们可以拿到View的引用后使用setTag()和getTag()方法,道理跟ConvertView.setTag()和ConvertView.getTag()是一样的。所以在异步加载图片的时候我们给予ImageView一个Tag,在加载完成回调的时候根据这个Tag来判断是否要把图片设置到当前的ImageView中。
另外要善于利用AbsListView.RecyclerListener接口,使用这个接口可以达到只更新当前界面那些列的图片以及释放其他资源。viewsource
以上是我的看法,欢迎指正
1 | private final ArrayList<View> mActiveImages = new ArrayList<View>(); |
01 | @Override |
02 | public View getView( int position, View convertView, ViewGroup parent) { |
03 | ViewHolderholder = null ; |
04 | if (convertView == null ){ |
05 | //inflate convertView |
06 | holder= new ViewHolder(); |
07 | //initial holer,means findViewById |
08 | convertView.setTag(holder); |
09 | } else { |
10 | holder= (ViewHolder)convertView.getTag(); |
11 | } |
12 | //do your stuff |
13 |
14 | //add first then load icon,make sure we have the image holding the icon is contained at mActiveImages |
15 | mActiveImages.remove(holder.mIcon); |
16 | mActiveImages.add(holder.mIcon); |
17 | //set tag to imageview for not messing up the images |
18 | holder.mIcon.setTag( "yourtag" ); |
19 | //here load Icon |
20 |
21 | return convertView; |
22 | } |
01 | @Override |
02 | public void onMovedToScrapHeap(View view) { |
03 | ViewHolderholder = (ViewHolder)view.getTag(); |
04 | mActiveImages.remove(holder.mIcon); |
05 | } |
06 |
07 | @Override |
08 | public void setIcon(ImageView image, String tag, Drawable drawable) { |
09 | if (mActiveImages.contains(image) && tag.equals(image.getTag())) { |
10 | image.setImageDrawable(drawable); |
11 | } |
12 | } |
相关文章推荐
- 关于ListView异步加载图片导致图片显示混乱以及ListView效率问题探讨
- 关于ListView中异步加载图片时,图片显示错误的问题
- Android listview异步加载图片(线程池,内存缓存,SD卡缓存)优化显示
- ListView的常见优化:获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- 关于ListView (1)——异步加载图片
- 异步加载图片,显示listview中的图片
- Android ListView异步加载图片错位、重复、闪烁分析以及解决方案
- ListView优化,获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- 关于ListView (1)——异步加载图片
- 带图片的ListView(GridView)的图片异步加载、OOM处理以及图片和数据缓存策略的研究
- Android ListView异步加载图片错位、重复、闪烁分析以及解决方案
- android ListView 重写 SimpleAdapter 显示图片 异步加载及文字处理
- Android ListView图片异步加载显示
- 关于ListView (1)——异步加载图片
- Android ListView异步加载图片错位、重复、闪烁分析以及解决方案
- Android ListView异步加载图片时图片顺序混乱解决办法
- Android之ListView异步加载图片且仅显示可见子项中的图片
- Android ListView图片异步加载显示
- Android之ListView异步加载图片且仅显示可见子项中的图片
- Android实习04:ListView网络异步加载图片的优化显示(2)