Android--ListView 更高效的使用 Adapter

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

更新的效率比较:

posted @ 2012-01-06 14:09  HuaDeFei  阅读(5366)  评论(3编辑  收藏  举报