zoukankan      html  css  js  c++  java
  • Android 开发ListView适配器优化

    我们都知道Android中Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。想过没有? 在我们的列表有1000000时会是什么样的?是不是会占用极大的系统资源?

    看看下面的代码:

    publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
    Viewitem=mInflater.inflate(R.layout.list_item_icon_text,null);
    ((TextView)item.findViewById(R.id.text)).setText(DATA[position]);
    ((ImageView)item.findViewById(R.id.icon)).setImageBitmap(
    (position&1)==1?mIcon1:mIcon2);
    returnitem;
    }

    大家不用我说也知道是怎么样了。如果超过1000000项时,后果不堪设想!您可千万别这么写!

    再来看看下面的代码:

    publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
    if(convertView==null){
    convertView=mInflater.inflate(R.layout.item,null);
    }
    ((TextView)convertView.findViewById(R.id.text)).setText(DATA[position]);
    ((ImageView)convertView.findViewById(R.id.icon)).setImageBitmap(
    (position&1)==1?mIcon1:mIcon2);
    returnconvertView;
    }

    怎么样,上面的代码是不是好了很多?系统将会减少创建很多View。性能得到了很大的提升。

    当然还有更优化的代码:

    publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
    ViewHolderholder;
    if(convertView==null){
    convertView=mInflater.inflate(R.layout.list_item_icon_text,null);
    holder=newViewHolder();
    holder.text=(TextView)convertView.findViewById(R.id.text);
    holder.icon=(ImageView)convertView.findViewById(R.id.icon);
    convertView.setTag(holder);
    }else{
    holder=(ViewHolder)convertView.getTag();
    }
    holder.text.setText(DATA[position]);
    holder.icon.setImageBitmap((position&1)==1?mIcon1:mIcon2);
    returnconvertView;
    }
    
    staticclassViewHolder{
    TextViewtext;
    ImageViewicon;
    }

    网盘学习资源分享:http://pan.baidu.com/share/home?uk=1882162285

  • 相关阅读:
    基于mysql-JDBC的java编程(通过java连接数据库)
    mysql-windows系统上的安装配置
    Jsp编程的基础模型
    CSPRNG随机数产生器
    IntlChar()
    unserialize()过滤机制
    Closure::call()
    PHP匿名类
    LINUX 安装PHP7教程
    解析UNICODE方法
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3327706.html
Copyright © 2011-2022 走看看