Baseadapter
public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseViewHolder> {
protected Context mContext;
protected List<T> mList;
protected int layoutId;
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
public interface OnItemLongClickListener {
void onItemLongClick(View view, int position);
}
protected OnItemClickListener mOnItemClickListener = null;
protected OnItemLongClickListener mOnItemLongClickListener = null;
public BaseAdapter(Context context, List<T> list) {
mContext = context;
mList = list;
}
public BaseAdapter(Context context, List<T> list, int layoutId) {
mContext = context;
mList = list;
this.layoutId = layoutId;
}
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// View view = LayoutInflater.from(mContext).inflate(layoutId, null, false);
View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
BaseViewHolder vh = new BaseViewHolder(view);
vh.setOnItemClickListener(mOnItemClickListener);
vh.setOnItemLongClickListener(mOnItemLongClickListener);
return vh;
}
@Override
public void onBindViewHolder(BaseViewHolder holder, int position) {
bindViewHolder(holder, getItem(position), position);
}
@Override
public int getItemCount() {
return mList.size();
}
/**
* Implement this method and use the helper to adapt the view to the given item.
*
* @param viewHoder A fully initialized helper.
* @param item The item that needs to be displayed.
* @param position
*/
protected abstract void bindViewHolder(BaseViewHolder viewHoder, T item, int position);
public void setOnItemClickListener(OnItemClickListener listener) {
this.mOnItemClickListener = listener;
}
public void setOnItemLongClickListener(OnItemLongClickListener listener) {
this.mOnItemLongClickListener = listener;
}
/**
* 封装的一些Adapter中的常用方法
*/
/**
* 根据position获取Item
*
* @param position
* @return
*/
public T getItem(int position) {
if (position >= mList.size())
return null;
return mList.get(position);
}
/**
* 清空列表数据
*/
public void clear() {
if (mList == null || mList.size() <= 0)
return;
for (Iterator iterator = mList.iterator(); iterator.hasNext(); ) {
T t = (T) iterator.next();
int position = mList.indexOf(t);
iterator.remove();
notifyItemRemoved(position);
}
}
/**
* 从列表中删除某项
*
* @param t
*/
public void removeItem(T t) {
int position = mList.indexOf(t);
mList.remove(position);
notifyItemRemoved(position);
}
/**
* 获取整个列表的数据
*
* @return List
*/
public List<T> getList() {
return mList;
}
/**
* 向列表中添加数据
*
* @param datas
*/
public void addData(List<T> datas) {
addData(0, datas);
}
/**
* 向列表中的具体位置添加数据
*
* @param position
* @param list
*/
public void addData(int position, List<T> list) {
if (list != null && list.size() > 0) {
for (T t : list) {
mList.add(position, t);
notifyItemInserted(position);
}
}
}
/**
* 刷新列表
* 下拉刷新
* @param list
*/
public void refreshData(List<T> list) {
clear();
if (list != null && list.size() > 0) {
int size = list.size();
for (int i = 0; i < size; i++) {
mList.add(i, list.get(i));
notifyItemInserted(i);
}
}
}
/**
* 加载更多
* 上拉加载
* @param list
*/
public void loadMoreData(List<T> list) {
if (list != null && list.size() > 0) {
int size = list.size();
int begin = mList.size();
for (int i = 0; i < size; i++) {
mList.add(list.get(i));
notifyItemInserted(i + begin);
}
}
}
}
BaseViewHolder
public class BaseViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnLongClickListener{
private SparseArray<View> mViews;
private BaseAdapter.OnItemClickListener mOnItemClickListener ;
private BaseAdapter.OnItemLongClickListener mOnItemLongClickListener ;
public BaseViewHolder(View itemView) {
super(itemView);
this.mViews = new SparseArray<>();
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
}
public void setOnItemClickListener(BaseAdapter.OnItemClickListener listener) {
this.mOnItemClickListener = listener;
}
public void setOnItemLongClickListener(BaseAdapter.OnItemLongClickListener listener) {
this.mOnItemLongClickListener = listener;
}
/**
* 一些常用控件的获取 TextView
* @param viewId
* @return TextView
*/
public TextView getTextView(int viewId) {
return bindView(viewId);
}
/**
* 一些常用控件的获取 ImageView
* @param viewId
* @return ImageView
*/
public ImageView getImageView(int viewId) {
return bindView(viewId);
}
/**
* 一些常用控件的获取 Button
* @param viewId
* @return Button
*/
public Button getButton(int viewId) {
return bindView(viewId);
}
/**
* 一些常用控件的获取 CheckBox
* @param viewId
* @return CheckBox
*/
public CheckBox getCheckBox(int viewId) {
return bindView(viewId);
}
/**
* 一些常用控件的获取 View
* @param viewId
* @return View
*/
public View getView(int viewId) {
return bindView(viewId);
}
/**
* 尝试绑定View的Id,成功将其缓存到SparseArray中
* @param viewId
* @param <T>
* @return T extends View
*/
protected <T extends View> T bindView(int viewId) {
View view = mViews.get(viewId);
if (view == null) {
view = itemView.findViewById(viewId);
mViews.put(viewId, view);
}
return (T) view;
}
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(v,getLayoutPosition());
}
}
@Override
public boolean onLongClick(View v) {
if (mOnItemLongClickListener != null) {
mOnItemLongClickListener.onItemLongClick(v,getLayoutPosition());
}
return true;
}
}