CommonAdapter.java
public abstract class CommonAdapter<T> extends BaseAdapter {//泛型的使用可让子类展示不同实体数据
protected Context mContext;
protected List<T> lists;
protected LayoutInflater inflater;
protected int layoutId;
public CommonAdapter(Context context, List<T> lists, int layoutId) {
this.mContext = context;
this.lists = lists;
this.layoutId = layoutId;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return lists.size();
}
@Override
public T getItem(int position) {
return lists.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = ViewHolder.get(mContext, convertView, parent, layoutId, position);
convert(viewHolder, getItem(position));
return viewHolder.getConvertView();
}
public abstract void convert(ViewHolder viewHolder, T t);
protected void removeAllList() {//清楚所有item
lists.clear();
notifyDataSetChanged();
}
protected void addOneItem(T t) {//增加一个item
lists.add(t);
notifyDataSetChanged();
}
}
ViewHolder.java
public class ViewHolder {
private SparseArray<View> mViews;//android推荐使用的数据结构代替Hashmap,性能较佳
private int mPoisition;
private View mConvertView;
public ViewHolder(Context context, ViewGroup parent, int layoutId, int position) {
this.mPoisition = position;
this.mViews = new SparseArray<View>();
mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false);
mConvertView.setTag(this);//setTag复用ConvertView,性能优化常见步骤之一
}
<span style="font-family: Arial, Helvetica, sans-serif;"> //此段代码在adapter中常见,不加阐述</span>
public static ViewHolder get(Context context, View convertView, ViewGroup parent, int layoutId, int position) {
if (convertView == null) {
return new ViewHolder(context, parent, layoutId, position);
} else {
ViewHolder holder = (ViewHolder) convertView.getTag();
holder.mPoisition = position;
return holder;
}
}
public View getConvertView() {
return mConvertView;
}
//封装findViewById方法 获取控件
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;
}
//Item控件的常用方法封装,可根据需要自行在此处添加
public ViewHolder setText(int viewId, String text) {
TextView tv = getView(viewId);
tv.setText(text);
return this;
}
public ViewHolder setImageRes(int viewId, int resId) {
ImageView iv = getView(viewId);
iv.setImageResource(resId);
return this;
}
public ViewHolder setTag(int viewId, Object tag) {
View view = getView(viewId);
view.setTag(tag);
return this;
}
public int getPoisition() {
return mPoisition;
}
public ViewHolder setImageBitmap(int viewId, Bitmap bitmap) {
ImageView iv = getView(viewId);
iv.setImageBitmap(bitmap);
return this;
}
}