這裏是BaseAdapter的寫法
public abstract class CustomAdapter<T> extends BaseAdapter {
protected Context mContext;
protected List<T> mDatas;
private LayoutInflater mInflater;
private int layoutID;
public CustomAdapter(Context mContext, List<T> mDatas, int layoutID) {
super();
this.mContext = mContext;
this.mDatas = mDatas;
this.layoutID = layoutID;
mInflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
return mDatas.size();
}
@Override
public T getItem(int position) {
return mDatas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = ViewHolder.getViewHolder(mContext, parent, convertView, layoutID, position);
convert(holder, getItem(position));
return holder.getConvertView();
}
/**
* getView()方法中的操作,用戶自己實現
* @param holder
* @param t
*/
public abstract void convert(ViewHolder holder,T t);
}
通用ViewHolder靜態類的編寫:
public class ViewHolder {
// SparseArray 類似於 HashMap 集合
private SparseArray<View> mViews;
private View mConvertView;
private int mPosition;
public ViewHolder(Context context, ViewGroup parent, int layoutID,
int position) {
this.mPosition = position;
mViews = new SparseArray<View>();
// 加載佈局
mConvertView = LayoutInflater.from(context).inflate(layoutID, parent, false);
mConvertView.setTag(this);
}
public static ViewHolder getViewHolder(Context context, ViewGroup parent,
View convertView, int layoutID, int position) {
if (convertView == null) {
// 當convertView對象爲空時 創建一個ViewHolder對象
return new ViewHolder(context, parent, layoutID, position);
} else {
ViewHolder holder = (ViewHolder) convertView.getTag();
holder.mPosition = position;
return holder;
}
}
public View getConvertView() {
return mConvertView;
}
/**
* 通過id 找控件
* @param viewID
* @return
*/
public <T extends View> T getView(int viewID) {
View view = mViews.get(viewID);
if (view == null) {
view = mConvertView.findViewById(viewID);
mViews.put(viewID, view);
}
return (T) view;
}
}