打造通用的BaseAdapter

這裏是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;
}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章