继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Android--ListView 更高效的使用 Adapter

明月笑刀无情
关注TA
已关注
手记 104
粉丝 17
获赞 57

Adapter是ListView和数据源之间的中间人。

当每条数据进入可见区时,adapter会调用他的getView()方法,并返回代表具体数据的视图。滚动的时候频繁调用,支持成千上万的数据。

①、最简单的方法,最慢最不实用

public void getView(int position , View convertView , ViewGroup parent){
        View item = mInflater.inflate(R.layout.list_view, null);
        (TextView)item.findViewById(R.id.text).setText(DATA[position]);
        (ImageView)item.findViewById(R.id.img).setImageBitmap(icon);
        return item;
    }

②、利用convertView回收视图,效率提高200%

复制代码

public void getView(int position , View convertView , ViewGroup parent){
        if(convertView == null){
            convertView = mInflater.inflate(R.layout.list_view, null);
        }
      (TextView)convertView.findViewById(R.id.text).setText(DATA[position]);
      (ImageView)convertView.findViewById(R.id.img).setImageBitmap(icon);
         return convertView;
    }  

复制代码

③、使用ViewHolder模式,效率再提高50%

复制代码

static class ViewHolder{
        private TextView tv;
        private ImageView iv;
    }
    
    public void getView(int position , View convertView , ViewGroup parent){
        ViewHolder holder;
        if(convertView == null){
            convertView = mInflater.inflate(R.layout.list_view, null);
            holder = new ViewHolder();
            holder.tv = (TextView)convertView.findViewById(R.id.text);
            holder.iv = (ImageView)convertView.findViewById(R.id.img);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }
        holder.tv.setText(DATA[position]);
        holder.iv.setImageBitmap(icon);
        return convertView;
    }

摘自:http://www.cnblogs.com/felix-hua/archive/2012/01/06/2314436.html


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP