按照普通的写法,如果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应该效率会很高了

提高ListView的效率的更多相关文章

  1. 提高SQL查询效率(SQL优化)

    要提高SQL查询效率where语句条件的先后次序应如何写 http://blog.csdn.net/sforiz/article/details/5345359   我们要做到不但会写SQL,还要做到 ...

  2. 提高php编程效率技巧

    提高php编程效率技巧 投稿:mrr 字体:[增加 减小] 类型:转载 时间:2015-08-13   php是全球范围应用范围最广的开发语言,php和linux.apache.mysql紧密结合,形 ...

  3. java提高数据库访问效率代码优化

    package com.jb.jubmis.comm; import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQL ...

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

    提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...

  5. 提高SQL查询效率的常用方法

    提高SQL查询效率的常用方法 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driv ...

  6. 使用Dropbox提高个人数据管理效率

    Dropbox 应该大家都不陌生,其在云存储阵营中独树一帜,通俗的说它是提供多终端和云之间的数据同步服务,而就其本质来说它无非是将数据的采集.存储和分发三个关节打通,整合成统一服务对外提供.这就好比只 ...

  7. html样式表极大地提高了工作效率

    样式表极大地提高了工作效率 样式表定义如何显示 HTML 元素,就像 HTML 3.2 的字体标签和颜色属性所起的作用那样.样式通常保存在外部的 .css 文件中.通过仅仅编辑一个简单的 CSS 文档 ...

  8. 提高你开发效率的十五个Visual Studio 2010使用技巧

    提高你开发效率的十五个Visual Studio 2010使用技巧 相信做开发的没有不重视效率的.开发C#,VB的都知道,我们很依赖VS,或者说,我们很感谢VS.能够对一个IDE产生依赖,说明这个ID ...

  9. 提高运维效率(二)桌面显示IP

    运维人员远控电脑询问IP时,总要告诉用户找ip的步骤,岂不很烦? 以下方法直观地把ip地址显示在桌面上,再做个入职培训,即可提高运维效率. 1.  下载bginfo.exe软件,放到域控下的netlo ...

随机推荐

  1. java环信服务端注册IM代码

    下载环信api代码 https://github.com/easemob/emchat-server-examples 里面包含各种语言版本,我只下载了java版emchat-server-java ...

  2. html 压缩成一行

    文章java gulp-htmlmin 减少下载的时间

  3. C++使用初始化列表的方式来初始化字段

    几个月之前,接触Android recovery源代码的时候,看ScreenRecoveryUI类的时候,那时候C++基础还不是特别好,一直不明白以下的初始化方式: 下面这个是Recovery的一个构 ...

  4. 如何创建 Visual Studio 2017 RC 离线安装包

    创建 Visual Studio 的离线安装计划 首先下载相应版本的可执行文件,例如:vs_community.exe.vs_enterprise.exe 或 vs_professional 在 cm ...

  5. python学习之函数和函数参数

    #方法的参数定义和默认参数的定义 def ask_ok(prompt, retries=4, complaint='Yes or no, please!'): while True: ok = inp ...

  6. kafka系列之(3)——Coordinator与offset管理和Consumer Rebalance

    from:http://www.jianshu.com/p/5aa8776868bb kafka系列之(3)——Coordinator与offset管理和Consumer Rebalance 时之结绳 ...

  7. Fillder手机抓包的使用

    1.Fillder下载地址: http://www.onlinedown.net/soft/73207.htm 2.网络设置 手机和电脑需链接网络相同 3.fillder设置 3.1打开fillder ...

  8. sqlalchemy在pythonweb中开发的使用(基于tornado的基础上)

    一.关于SQLAlchemy的安装pip install SQLAlchemy安装如果上面的方式安装不成功的情况可以使用下面的方法 百度下载window或者linux下面对应的sqlalchemy的版 ...

  9. PDF通过剪裁来实现打印字体变大

    之前打印论文,很多都是一页两版,这个时候字体会非常小:打印缩放放大后,字又容易出了打印边界. 这种情况可以采用Adobe IX Pro(只要是pro应该都可以)进行边缘裁剪来实现字体放大.只需要剪裁( ...

  10. hive字段原理--有删除一列想到的

    hive删除一张表的字段不会动数据文件,只是修改了一下metadata表里面的表定义:所以会出现一种情况:就是这张表如果之前数据是满的(个格列都有数据),那么被删除的那列后数据都往前窜了一个,最后一个 ...