前言
今天是新年第一天,本来打算在上一年的最后一天写下来的,但是由于玩的时间长了一点,所以今天才写,算是在新的一年开一个好头,新年新气象嘛!
至于为什么要写这个文章呐!由于项目中以前都是用ListView实现的列表,很多东西都已经习惯化了,每次都是由的新的模块或者功能才使用RecyclerView,因此一直都没有完整的总结一遍,这次也是在一个新的项目中,准备完全采用RecyclerView来实现列表,因此初步的封装了一下。
为什么要封装呐?事实上,系统对该控件已经封装的很好了,直接拿过来用就行,使用方式也跟以前差不多,构造一个RecyclerView,再构造一个Adapter,当连续写了2个之后就不再想重复劳动了,因此对Adapter进行的简单的封装,
BaseAdapter
这里就大致罗列一下封装的过程,只是实现了初步的功能,后续的功能可以逐步添加,在最后会给出一个使用样例。
BaseAdapter
既然是对Adapter的简单封装,那第一步就是先来实现基类的Adapter,代码如下:
public class BaseAdapter<T> extends RecyclerView.Adapter<BaseViewHolder> {
/**
* data source
*/
public List<T> dataList;
/**
* onClick onLongClick callback
*/
public onItemClickListener listener;
/**
* constructor view holder delegate
*/
public BaseDelegate delegate;
/**
* constructor
*
* @param dataList
* @param delegate
*/
public BaseAdapter(List<T> dataList, BaseDelegate delegate) {
this(dataList, delegate, null);
}
/**
* constructor
*
* @param dataList
* @param delegate
* @param listener
*/
public BaseAdapter(List<T> dataList, BaseDelegate delegate, onItemClickListener listener) {
checkData(dataList);
this.delegate = delegate;
this.listener = listener;
}
/**
* just is empty
*
* @param dataList
*/
private void checkData(List<T> dataList) {
if (dataList == null) {
dataList = Collections.emptyList();
}
this.dataList = dataList;
}
/**
* set onclick & onLongClick callback
*
* @param listener
*/
public void setOnItemClickListener(onItemClickListener listener) {
this.listener = listener;
}
/**
* create view holder
*
* @param parent
* @param viewType
* @return
*/
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return delegate.onCreateViewHolder(parent, viewType);
}
/**
* bind view holder
*
* @param holder
* @param position
*/
@Override
public void onBindViewHolder(BaseViewHolder holder, final int position) {
holder.onBindViewHolder(dataList.get(position));
if (listener != null && holder.enable()) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onClick(v, dataList.get(position));
}
});
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return listener.onLongClick(v, dataList.get(position));
}
});
}
}
/**
* get item count
*
* @return
*/
@Override
public int getItemCount() {
return dataList.size();
}
/**
* get item view type
*
* @param position
* @return
*/