ListView 更高效的使用 Adapter

来源:互联网 发布:企业邮箱域名入口 编辑:程序博客网 时间:2024/06/05 05:40

一、Adapter

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;    }

更新的效率比较:

0 0
原创粉丝点击