CommonAdapter
public abstract class CommonAdapter<T> extends BaseAdapter{
private Context mContext;
protected List<T> data;
private int mItemLayoutId;
protected CommonAdapter(Context context, List<T> data, int mItemLayoutId){
this.mContext=context;
this.data=data;
this.mItemLayoutId=mItemLayoutId;
}
@Override
public int getCount() {
return data.size();
}
@Override
public T getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
CommonHolder holder = getViewHolder(convertView, parent);
convert(holder,getItem(position));
return holder.getConvertView();
}
public abstract void convert(CommonHolder holder, T data);
private CommonHolder getViewHolder(View convertView, ViewGroup parent){
return CommonHolder.get(mContext, convertView, parent, mItemLayoutId);
}
}
CommonHolder
public class CommonHolder {
private SparseArray<View> views;
private View convertView;
private CommonHolder(Context context, ViewGroup parent, int layoutId) {
views = new SparseArray<>();
convertView = LayoutInflater.from(context).inflate(layoutId, parent, false);
convertView.setTag(this);
}
public static CommonHolder get(Context context, View convertView,
ViewGroup parent, int layoutId) {
if (null == convertView) {
return new CommonHolder(context, parent, layoutId);
} else {
return (CommonHolder) convertView.getTag();
}
}
public <T extends View> T getView(int viewId) {
View view = views.get(viewId);
if (null == view) {
view = convertView.findViewById(viewId);
views.put(viewId, view);
}
return (T) view;
}
public View getConvertView() {
return convertView;
}
public void setText(int viewId, String text) {
TextView view = getView(viewId);
view.setText(text);
}
public void setOnClickListener(int viewId, View.OnClickListener listener) {
View view = getView(viewId);
view.setOnClickListener(listener);
}
}
Example
CommonAdapter<String> commonAdapter = new CommonAdapter<String>(getContext(), mDatas, R.layout.item) {
@Override
public void convert(CommonHolder holder, String data) {
holder.setText(R.id.text, data);
}
};
list.setAdapter(commonAdapter);