RecyclerView (万能的适配器和实现列表项的拖动和左右滑动)
参考鸿神的代码。。。
1.万能的RecyclerView 适配器
《1》第一步BaseAdapter
package wang.dom.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
/**
* Created by RaphetS on 2016/9/28.
* 普通的万能Adapter
* 支持onItemClick
* 支持onLongItemClick
*/
public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseViewHolder> {
private Context mContext;
private List<T> mDatas;
private int mLayoutId;
private OnItemClickListener mItemClickListener;
private onLongItemClickListener mLongItemClickListener;
/**
*
* @param mContext:上下文
* @param mDatas:数据源
* @param mLayoutId:布局文件id
*/
public BaseAdapter(Context mContext, List<T> mDatas, int mLayoutId) {
this.mContext = mContext;
this.mDatas = mDatas;
this.mLayoutId = mLayoutId;
}
public void updateData(List<T> data) {
mDatas.clear();
mDatas.addAll(data);
notifyDataSetChanged();
}
public void addAll(List<T> data) {
mDatas.addAll(data);
notifyDataSetChanged();
}
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(mLayoutId, parent, false);
BaseViewHolder holder = new BaseViewHolder(view);
return holder;
}
@Override
public int getItemCount() {
return mDatas.size();
}
@Override
public void onBindViewHolder(BaseViewHolder holder, final int position) {
//调用该抽象方法,用来对列表赋值
convert(mContext, holder, mDatas.get(position));
//绑定的事件
if (mItemClickListener != null) {
holder.mItemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mItemClickListener.onItemClick(v, position);
}
});
}
if (mLongItemClickListener != null) {
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mLongItemClickListener.onLongItemClick(v, position);
return true;
}
});
}
}
/**
* 对列表赋值的抽象方法
* @param mContext :上下文
* @param holder:当前的BaseViewHolder
* @param t:当前对象
*/
protected abstract void convert(Context mContext, BaseViewHolder holder, T t);
//点击事件
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
//长按点击事件
public interface onLongItemClickListener {
void onLongItemClick(View view, int postion);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.mItemClickListener = listener;
}
public void setonLongItemClickListener