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