Androidフレームワークのより簡易なArrayAdapter

2751 ワード

BaseAdapterはAndroid開発で使用頻度が高いListViewのベースAdapterであり、さらにAndroid公式にもう一つのArrayAdapterが提供されており、その名前を見るとリストセットを封入した簡易Adapterであることがわかる.Adapterは常にViewHolderと組み合わせて使用されており、すでに生成されたViewを効率的に多重化することができます.ArrayAdapterは便利ですが、開発中は常にViewHolderに接続されたコードを作成しなければなりません.怠惰は開発者の天性なので、ここで抽象化し、ArrayAdapterをより便利にします.
乾物Gistここを注文java
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

/**
 * @author solo
 */
public abstract class MagicArrayAdapter extends ArrayAdapter {

    private final LayoutInflater mInflater;
    private final int mResource;

    public MagicArrayAdapter(Context context, int resource) {
        super(context, resource);
        mResource = resource;
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        MagicViewHolder h;
        if (convertView == null) {
            convertView = mInflater.inflate(mResource, parent, false);
            h = getViewHolder(position, convertView, parent);
            convertView.setTag(h);
        } else {
            h = (MagicViewHolder) convertView.getTag();
        }
        h.populateView(position, convertView, parent, getItem(position));
        return convertView;
    }

    abstract public MagicViewHolder getViewHolder(int position, View convertView, ViewGroup parent);

}

MagicViewHolder.java
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

/**
 * @author solo
 */
public abstract class MagicViewHolder  {

    public MagicViewHolder(View view) {
      
    }

    /**
     *   AdapterView   item
     */
    abstract public void populateView(int position, View convertView, ViewGroup parent, T item);
    
}

使用例:
// Adapter
class YourAdapter extends MagicArrayAdapter {

    public YourAdapter(Context context) {
        super(context, R.layout.your_layout);
    }

    @Override
    public MagicViewHolder< YourEntity > getViewHolder(int position, View convertView, ViewGroup parent) {
        return new ViewHolder(convertView, this);
    }

}

// ViewHolder
static class ViewHolder extends MagicViewHolder {

    public ViewHolder(View view) {
        // hold your view
    }

    @Override
    public void populateView(int position, View convertView, ViewGroup parent, YourEntity item) {
        // do something
    }
}

コードは簡単です.きっと一目でわかると思います.
読者の皆さん、ありがとうございます.好きなら「いいね」を押してください.どこか分からないことがあったら、下にメッセージを残してもいいです.:)
転載は本文の住所を添付してください