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

  • 相关阅读:
    配置rc.local开机自启动文件的疑问
    linux下使用shell查看apache IP访问量
    linux 查看剩余内存数
    linux ps 命令
    移动端资料大全
    git命令大全
    redis 应用场景
    TP框架中的多种方法代码(C,G,L,T,I,N,D,M,A,R,B,U,W,S,F,E)
    在linux上安装svn
    mysql 分表的实现方式
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3327706.html
Copyright © 2011-2022 走看看