zoukankan      html  css  js  c++  java
  • 提高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应该效率会很高了

  • 相关阅读:
    Oracle数据库基础select语句用法
    Java中volatile的作用以及用法
    [Java]读取文件方法大全
    经典SQL语句大全
    js动态加载控件jsp页面
    JAVA中List、Map、Set的区别与选用
    表格java代码的相关知识积累
    解决JSP中文乱码问题
    SSH框架的简单学习—Structs学习
    float存储方式编程验证
  • 原文地址:https://www.cnblogs.com/wzben/p/5057611.html
Copyright © 2011-2022 走看看