Adapter 是listView和数据源之间的中间人
最简单的方法, 最慢最不实用:
public View getView(int pos, View convertView, ViewGroup parent) {
View item = mInflater.inflate(R.layout.list_item, null);
((TextView) item.findViewById(R.id.text)).setText(DATA[pos]);
((ImageView) item.findViewButId(R.id.icon))
.setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);
return item;
}
利用 convertView 回收视图, 效率提高 200%:
public View getView(int pos, View convertView,
ViewGroup parent){
if (convertView == null) {
convertView = mInflater.inflate(
R.layout.list_item, null);
}
((TextView) convertView.findViewById(R.id.text)).
setText(DATA[pos]);
((ImageView) convertView.findViewButId(R.id.icon)).
setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);
return convertView;
}
使用 ViewHolder 模式, 效率再提高 50%:
static class ViewHolder {
TextView text;
ImageView icon;
}
public View getView(int pos, View convertView, ViewGroup parent){
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(
R.id.text));
holder.icon = (ImageView) convertView.findViewButId(
R.id.icon));
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(DATA[pos]);
holder.icon.setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);