适用ListView和GridView
public abstract class BaseListAdapter extends BaseAdapter{
private List list;
private int mLayoutRes; //布局id
public BaseListAdapter(List list, int mLayoutRes) {
this.list = list;
this.mLayoutRes = mLayoutRes;
}
@Override
public int getCount() {
return list != null ? list.size() : 0;
}
@Override
public T getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = ViewHolder.bind(parent.getContext(), convertView, parent, mLayoutRes, position);
bindView(holder, getItem(position));
return holder.getItemView();
}
public abstract void bindView(ViewHolder holder, T obj);
//添加一条数据
public void add(T t) {
if (list == null) {
list = new ArrayList();
}
list.add(t);
notifyDataSetChanged();
}
//在指定位置添加一条数据
public void add(int position,T t) {
if (list == null) {
list = new ArrayList();
}
list.add(position, t);
notifyDataSetChanged();
}
public void remove(T t) {
if (list != null) {
list.remove(t);
}
notifyDataSetChanged();
}
public void remove(int position) {
if (list != null) {
list.remove(position);
}
notifyDataSetChanged();
}
public void clear() {
if (list != null) {
list.clear();
}
notifyDataSetChanged();
}
public void refresh() {
if (list != null) {
notifyDataSetChanged();
}
}
public static class ViewHolder {
private View item;
private SparseArray mViews;
private int position;
private ViewHolder(Context context, ViewGroup parent, int layoutRes) {
mViews = new SparseArray();
View convertView = LayoutInflater.from(context).inflate(layoutRes, parent, false);
convertView.setTag(this);
item = convertView;
}
//绑定ViewHolder与item
public static ViewHolder bind(Context context, View convertView, ViewGroup parent, int layoutRes, int position) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder(context, parent, layoutRes);
} else {
holder = (ViewHolder) convertView.getTag();
holder.item = convertView;
}
holder.position = position;
return holder;
}
@SuppressWarnings("unchecked")
public T getView(int id) {
T t = (T) mViews.get(id);
if (t == null) {
t = (T) item.findViewById(id);
mViews.put(id, t);
}
return t;
}
/**
* 获取当前条目
*/
public View getItemView() {
return item;
}
public int getItemPosition() {
return position;
}
/**
* 设置文字
*/
public ViewHolder setText(int id, CharSequence text) {
View view = getView(id);
if (view instanceof TextView) {
((TextView) view).setText(text);
}
return this;
}
/**
* 设置图片
*/
public ViewHolder setImageResource(int id, int drawableRes) {
View view = getView(id);
if (view instanceof ImageView) {
((ImageView) view).setImageResource(drawableRes);
} else {
view.setBackgroundResource(drawableRes);
}
return this;
}
// public ViewHolder setImage(int id, String drawableRes) {
// View view = getView(id);
// if (view instanceof ImageView) {
//
// Bitmap bitmap = FileUtil.stringToBitmap(drawableRes);
// ((ImageView) view).setImageBitmap(bitmap);
// } else {
// return this;
// }
// return this;
// }
/**
* 设置点击监听
*/
public ViewHolder setOnClickListener(int id, View.OnClickListener listener) {
getView(id).setOnClickListener(listener);
return this;
}
/**
* 设置可见
*/
public ViewHolder setVisibility(int id, int visible) {
getView(id).setVisibility(visible);
return this;
}
/**
* 设置标签
*/
public ViewHolder setTag(int id, Object obj) {
getView(id).setTag(obj);
return this;
}
public ViewHolder setTypeface(int id, Typeface typeface) {
View view = getView(id);
if (view instanceof TextView) {
((TextView) view).setTypeface(typeface);
}
return this;
}
public ViewHolder setBackgroundColor(int id, int color) {
getView(id).setBackgroundColor(color);
return this;
}
public ViewHolder setImageBitmap(int id, Bitmap bitmap) {
View view = getView(id);
if (view instanceof ImageView) {
((ImageView) view).setImageBitmap(bitmap);
}
return this;
}
}
}
适用RecyclerView
public abstract class BaseRecyclerAdapter extends RecyclerView.Adapter {
private List list;
private int mLayoutRes;
public BaseRecyclerAdapter(List list, int mLayoutRes) {
this.list = list;
this.mLayoutRes = mLayoutRes;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return ViewHolder.getHolder(parent.getContext(), mLayoutRes, parent);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
onBindData(holder, list.get(position));
}
@Override
public int getItemCount() {
return list.size();
}
public abstract void onBindData(ViewHolder holder, T obj);
public static class ViewHolder extends RecyclerView.ViewHolder {
private View itemView;
private SparseArray itemViews;
private int position;
private ViewHolder(@NonNull View itemView) {
super(itemView);
this.itemView = itemView;
itemViews = new SparseArray<>();
}
public static ViewHolder getHolder(Context context, int mLayoutRes, ViewGroup parent) {
ViewHolder holder = null;
if (holder == null) {
holder = new ViewHolder(LayoutInflater.from(context).inflate(mLayoutRes, parent, false));
}
return holder;
}
public T getView(int id) {
T t = (T) itemViews.get(id);
if (t == null) {
t = itemView.findViewById(id);
itemViews.put(id, t);
}
return t;
}
public ViewHolder setText(int id, CharSequence text) {
View view = getView(id);
if (view instanceof TextView) {
((TextView)view).setText(text);
} else if (view instanceof EditText) {
((EditText)view).setText(text);
}
return this;
}
public ViewHolder setOnClickListener(int id, View.OnClickListener listener) {
View view = getView(id);
view.setOnClickListener(listener);
return this;
}
}
}