如何使用 Adapter

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

猜你喜欢

转载自xuerge.iteye.com/blog/1855422