ListView 性能优化------使用ViewHolder,修改layout_weight属性为“match_parent”

转载自:http://blog.csdn.net/pkxiuluo01/article/details/7380860

Adapter是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。如果列表中有很多的项时会占用极大的系统资源,所以我们需要优化Adapter

1、convertView的使用

[java] view plaincopy

  1. Java代码
  2. public View getView(int position, View convertView, ViewGroup parent) {
  3. ViewHolder holder;
  4. if (convertView == null)
  5. {
  6. //加载ListView item的布局文件
  7. convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
  8. holder = new ViewHolder();
  9. holder.text = (TextView) convertView.findViewById(R.id.text);
  10. holder.icon = (ImageView) convertView.findViewById(R.id.icon);
  11. /**
  12. * 利用holder,调用convertView.setTag函数
  13. * 使得convertView创建的内存地址,不为空。
  14. * 然后调用getTag来获得当前位置的tag
  15. * 最后利用holder的各种set操作来替换当前位置的tag。
  16. */
  17. convertView.setTag(holder);
  18. }
  19. else
  20. {
  21. holder = (ViewHolder) convertView.getTag();
  22. }
  23. holder.text.setText(DATA[position]);
  24. holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);
  25. return convertView;
  26. }
  27. static class ViewHolder {
  28. private TextView text;
  29. private ImageView icon;
  30. }

上面这种方式对于每个View使用了一个ViewHolder来控制其内部的子item还使用了setTag和getTag的方法 将holder绑定到了view上而不是直接的新建View 是对Adapter的优化。

2、测试getView被调用的次数 
假设做一个动态刷新的ListView,发现显示的adapter.notifyDataSetChanged()的速度有点慢 那么可以测试下getView调用的次数 是不是太多。调用的次数多的让你觉着莫名其妙 那么说明 肯定是有问题的 一定会影响性能的。 
更改方法: 
Xml代码

[html] view plaincopy

  1. <ListView android:id="@+id/list"
  2. android:layout_width="fill_parent"
  3. android:layout_height="wrap_content" />

将android:layout_height="wrap_content"修改成:android:layout_height="fill_parent"就可以了。 
如果更改以后没用,ListView周围的控件也是"wrap_content"那么也需要修改。

3、关于ListView 对于纯色的item背景 其实可以直接设置BackgroundColor 而不要使用图片 这一部分其实可以有不小的提升 同样的 对于任何纯色的背景 应该尽量去设置RGB颜色 而不是全用一张图片做背景。

ListView 性能优化------使用ViewHolder,修改layout_weight属性为“match_parent”,布布扣,bubuko.com

时间: 2024-10-07 06:32:25

ListView 性能优化------使用ViewHolder,修改layout_weight属性为“match_parent”的相关文章

Android ListView性能优化实战方案

前言: 对于ListView,大家绝对都不会陌生,只要是做过Android开发的人,哪有不用ListView的呢? 只要是用过ListView的人,哪有不关心对它性能优化的呢? 关于如何对ListView进行性能优化,不仅是面试中常常会被问到的(我前段时间面试了几家公司,全部都问到了这个问题了),而且在实际项目中更是非常重要的一环,它甚至在某种程度上决定了用户是否喜欢接受你的APP.(如果你的列表滑起来很卡,我敢说很多人会直接卸载) 网上关于如何对ListView进行性能优化,提出了很多方案.但

Android之ListView性能优化——万能适配器

如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有觉得有什么不好的.直到最近在慕课网上看到鸿洋大神讲的“机器人小慕”和“万能适配器”两节课,才对BaseAdapter有所了解.看了鸿洋大神的课程之后,我又上网搜了几个博客,也看了一些源码和文档,于是打算写一个帖子来记录一下自己的学习历程. 在今天的帖子中,我们从一个最基本的实现BaseAdapter

Android进阶:ListView性能优化异步加载图片 使滑动效果流畅

ListView 是一种可以显示一系列项目并能进行滚动显示的 View,每一行的Item可能包含复杂的结构,可能会从网络上获取icon等的一些图标信息,就现在的网络速度要想保持ListView运行的很好滚动流畅是做不到的 所以这里就需要把这些信息利用多线程实现异步加载 实现这样功能的类 [java] view plaincopy public class AsyncImageLoader { private HashMap<String, SoftReference<Drawable>&

ym——Android之ListView性能优化

Android之ListView性能优化 如果有看过我写过的15k面试题的朋友们一定知道,ListView的优化方式有以下几种: 重用了convertView ViewHolder static class ViewHolder 在列表里面有图片的情况下,监听滑动不加载图片 以上是大致的说了以下,应付面试已经足够了,如果要使用到项目中,可能有些初学者就迷茫了.接下来我详细的说一下,这个是如何优化的. 重用了convertView getView这个方法会调用的次数是你们的数据条目数*2,重用了c

Android Listview 性能优化

首先我一般使用的适配器是BaseAdapter,其中有两个方法最主要,分别是: getCount,getView, 在对Listview 进行优化的时候,首先使用 convertview 和viewHolder 配合进行优化,使用convertview的母的是 控件复用,从而加到减少内存的使用,使用viewHolder 的是减少findbyid 的次数. 但是在进行控件以后,在进行图片加载的时候,会出现图片错位的问题,这是因为控件里面有上次残留的图片在里面,所以我们在初始化的时候需要设置一张默认

(翻译) Android ListView 性能优化指南

本文翻译了Lucas Rocha的Performance Tips for Android’s ListView.这是一篇关于介绍如何提升ListView性能的文章,非常的优秀.使得我拜读之后,忍不住将其翻译.本文采用了意译的翻译方式,尽可能的保持原文中要表达的内容.但是,任有几处翻译存在一些异议.请读者原谅.如果你对文章的内容有兴趣,请移步到我的blog,地址如下: 地址: http://kohoh1992.github.io/PerformanceTipsForAndroidListView

Android之ListView性能优化——使用ConvertView和ViewHolder

使用ConvertView和ViewHolder的优化是针对ListView的Adapter(BaseAdapter)的.这种优化的优点如下: 1)重用了ConveertView,在很大程度上减少了内存的消耗.通过判断ConvertView是否为NULL,如果是NULL那么就需要生成一个新的View出来(通过LayoutInflater生成),绑定数据后显示给用户:如果ConvertView不是NULL,则我们需要做的就只有绑定数据并呈现给用户. 2)由于ListView中的Item往往都是只有

ListView性能优化——convertView&viewHolder

ListView优化大致从以下几个角度:1.复用已经生成的convertView:2.添加viewHolder类:3.缓存数据(图片缓存):4.分页加载. http://www.cnblogs.com/itstudent/p/3729117.html

Listview性能优化

首先,虽然大家都知道,还是提一下,利用好 convertView 来重用 View,切忌每次 getView() 都新建.ListView 的核心原理就是重用 View.ListView 中有一个回收器,Item 滑出界面的时候 View 会回收到这里,需要显示新的 Item 的时候,就尽量重用回收器里面的 View. 利用好 View Type,例如你的 ListView 中有几个类型的 Item,需要给每个类型创建不同的 View,这样有利于 ListView 的回收,当然类型不能太多: 尽