CommonAdapter.java
public abstract class CommonAdapter<T> extends BaseAdapter{
protected Context mContext;
protected LayoutInflater mInflater;
protected List<T> mDatas;
private int mLayoutId;
public CommonAdapter(Context context,int layoutId, List<T> datas) {
mContext = context;
mDatas = datas;
mLayoutId = layoutId;
mInflater = LayoutInflater.from(context);
}
@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) {
CommonViewHolder holder = CommonViewHolder.getInstance(mContext, convertView, parent, mLayoutId, position);
convert(holder,getItem(position),position);
return holder.getConvertView();
}
public abstract void convert(CommonViewHolder holder,T bean,int position);
}
CommonViewHolder.java
public class CommonViewHolder {
private SparseArray<View> mViews;
private int mPosition;
private View mConvertView;
public static CommonViewHolder getInstance(Context context, View convertView, ViewGroup parent, int layoutId, int position) {
if (convertView == null) {
return new CommonViewHolder(context, parent, layoutId, position);
} else {
CommonViewHolder holder = (CommonViewHolder) convertView.getTag();
holder.mPosition = position;
return holder;
}
}
private CommonViewHolder(Context context, ViewGroup parent, int layoutId, int position) {
mPosition = position;
mViews = new SparseArray<View>();
mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false);
mConvertView.setTag(this);
}
public View getConvertView() {
return mConvertView;
}
public <T extends View> T getView(int viewId) {
View view = mViews.get(viewId);
if (null == view) {
view = mConvertView.findViewById(viewId);
mViews.put(viewId, view);
}
return (T) view;
}
}
使用方法
mLv.setAdapter(new CommonAdapter<Integer>(this, R.layout.row_school_or_department_or_year, mYearList) {
@Override
public void convert(CommonViewHolder holder, Integer year, int position) {
// TODO Auto-generated method stub
((TextView) holder.getView(R.id.id_name)).setText(year + "");
}
});
mLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
});