提高ListView的效率

按照普通的写法,如果ListView里面有比较多的东西的话,在加载每一个Item的时候,是非常非常卡的。具体表现就是滚动起来的时候会看见明显的卡顿。

关键还是处理自定义Adapter里面的getView函数,毕竟这个函数才是绘制Item的。

//观察getView函数,发现是有View convertView这个参数
public View getView(int position, View convertView, ViewGroup parent)


//如果convertView不为空的话,就是说这个Item的View已经是绘制过的了,我们直接view = convertView就好,不用再重新对View进行加工了。

if(convertView == null){

    view = LayoutInflater.from(getContext()).inflate(resouceID,null);

    //省略

}else{

    view = convertView;

}

进一步优化:

  可以自定义一个ViewHolder类,然后这个类的成员变量全是Item里面要用到的控件,用这个类来缓存Item的控件。用View.setTag(viewHolder)和View绑定,

如果convertView非空的时候,直接把里面的控件取出来就好了,不需要再次findViewByID一次。

  

  假设Item里面有一个TextView,一个Button。

class ViewHolder{

    TextView tv;

  Button bt;

}

  在getView里面:

  

public View getView(int position, View convertView, ViewGroup parent) {

    View  view;

    ViewHolder viewHolder;

  //没有绘制过的话
    if(convertView == null){

        view = LayoutInflater.from(getContext()).inflate(resouceID,null);

        viewHolder = new ViewHolder();
     
    //把所有控件弄进ViewHolder里面保存
        viewHolder.tv = (TextView)view.findViewById(R.id.itemtext);

     viewHolder.bt = (Button)view.findViewById(R.id.itembutton);

    //绑定在一起
         view.setTag(viewHolder);

    }else{
    
    //如果有的话就直接取出
        view = convertView;

    //经过了上一步,一个绘制过的View是肯定有一个ViewHolder的。
    //复制的是地址,只是方便修改
     viewHolder = (ViewHolder) view.getTag();

    }

    viewHolder.ty.setText("xx‘);
   viewHolder.bt.setText("xx");

  //或者其他代码

  //会根据view以及它绑定的viewHolder来绘制Item

    return view;

}

好了,这样优化过后,listView应该效率会很高了

时间: 2024-10-07 09:21:39

提高ListView的效率的相关文章

Android如何提高ListView的滑动效率

如何提高ListView的滚动速度,ListView的滚动速度的提高在于getView方法的实现,通常我们的getView方法会这样写: [java] view plaincopy View getView(int position,View convertView,ViewGroup parent){ //首先构建LayoutInflater LayoutInflater factory = LayoutInflater.from(context); View view = factory.i

Android-优化UI性能(2)-提高Adapter的效率

Android-优化UI性能(2)-提高Adapter的效率 一 提高Adapter的效率 Adapter是数据和ListView之间的桥梁,每当需要显示Item时,都会调用getView() 倘若我们的数据量很大,而Adapter的效率很低(每次都会调用inflate创建新的View,inflate(是一个IO操作)),这样界面就会很卡 例如在数据量比较大的时候使用下面的代码来getView()效率会很低: public View getView(int p_position, View p_

AUCTeX+Emacs 是目前我见过的能最大限度提高 LaTeX 编辑效率的编辑器 (转)

AUCTeX+Emacs 是目前我见过的能最大限度提高 LaTeX 编辑效率的编辑器 效率的提高程度取决于你对 Emacs/lisp 的熟悉程度,但可以说基本上能提高到你所能想象的最大程度了.下面我会就效率方面介绍它的几个特性,不仅与 WinEdt 做对比,同时也和其他 OSX上的某些编辑器做一下对比, 安装和配置网上很多,比如这篇小文档[1],这里就不介绍了. 强大的快捷键系统 (CDLaTeX) 就提高编辑效率而言,快捷键是最重要的,同样的内容别的编辑要按10下键盘才能实现你就按5下就实现了

简单十招提高jQuery执行效率

1. 使用最新版本的jQuery jQuery的版本更新很快,你应该总是使用最新的版本.因为新版本会改进性能,还有很多新功能. 下面就来看看,不同版本的jQuery性能差异有多大.这里是三条最常见的jQuery选择语句: $('.elem') $('.elem', context) context.find('.elem') 我们用1.4.2.1.4.4.1.6.2三个版本的jQuery测试,看看浏览器在1秒内能够执行多少次.结果如下: 可以看到,1.6.2版本的运行次数,远远超过两个老版本.尤

php学习高级-提高PHP编程效率的几点建议

1.如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍. 2.$row['id'] 的速度是$row[id]的7倍. 3.echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2. 4.在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替. 5.注销那些不用的变量尤其是大数组,以便释放内存. 6.尽量避免使用__get,__set,__autol

iOS开发——实用篇&提高iOS开发效率的方法和工具

提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时在使用AppCode等其他的IDE,在这里我主要介绍Xcode中提升开发效率的方法. 1.善用快捷键 快捷键是开发中必不可少的,当你善于使用快捷键的时候,十指在键盘上飞舞,那画面太美,我不敢想象. 常用快捷键操作 2.常用代码片段 开发中有一些常用的代码,可以放到代码片段中,然后下次你就可以使用快捷

Android 上能提高学习工作效率的应用

在知乎上有朋友问 Android 上能提高学习.工作效率的应用有哪些?我给他们的推荐获得了最多赞同.以后会不断完善更新此贴. Any.do :规划日程,各平台都有. Evernote:记笔记,各平台都有. OneNote:这个也不错,特别是文档功能很强大,微软有Office基因啊,但同步有点慢... Quora:问答SNS网站客户端 ,看问题学英语感觉不错 Pocket:稍候阅读软件,各平台都有,chrome有插件,自定义快捷键chrome上快速保存文章,Android上各App都可以分享到Pl

使用supervisor提高nodejs调试效率

如果你有PHP 开发经验,会习惯在修改PHP 脚本后直接刷新浏览器以观察结果,而你 在开发Node.js 实现的HTTP 应用时会发现,无论你修改了代码的哪一部份,都必须终止 Node.js 再重新运行才会奏效.这是因为Node.js 只有在第一次引用到某部份时才会去解析脚 本文件,以后都会直接访问内存,避免重复载入,而PHP 则总是重新读取并解析脚本(如 果没有专门的优化配置).Node.js的这种设计虽然有利于提高性能,却不利于开发调试,因 为我们在开发过程中总是希望修改后立即看到效果,而不

提高sqlmap爆破效率

提高sqlmap爆破效率 sqlmap在注入成功后,会尝试获取数据库和表的结构.对于MSSQL.MySQL.SQLite之类数据库,sqlmap可以通过系统数据库.系统数据表获取数据库和表的结构.但是对于Access数据库,就只能通过爆破方式获取表名和表结构.爆破时候,sqlmap采用内置字典方式进行操作.这些字典保存在/usr/share/sqlmap/txt目录中.想要提供爆破效率,用户可以扩充这些字典.例如,common-colums.txt保存着爆破列所使用的字典:common-tabl