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