RecyclerView经常需要添加拖拽、滑动删除的功能,这里在前文的基础上,自定义一个适配器
适配器
继承前文的BaseRecyclerViewAdapter,拓展拖拽排序、滑动删除的功能
public abstract class BaseItemRecyclerViewAdapter<T, K extends BaseViewHolder> extends BaseRecyclerViewAdapter<T, K>{
private int Tag = R.id.BaseQuickAdapter_dragging_support;
private static final int NO_TOGGLE_VIEW = 0;
protected int mToggleViewId = NO_TOGGLE_VIEW;
protected ItemTouchHelper mItemTouchHelper;
protected boolean itemDragEnabled = false;
protected boolean itemSwipeEnabled = false;
protected OnItemDragListener mOnItemDragListener;
protected OnItemSwipeListener mOnItemSwipeListener;
protected boolean mDragOnLongPress = true;
protected View.OnTouchListener mOnToggleViewTouchListener;
protected View.OnLongClickListener mOnToggleViewLongClickListener;
private static final String ERROR_NOT_SAME_ITEMTOUCHHELPER = "Item drag and item swipe should pass the same ItemTouchHelper";
public BaseItemRecyclerViewAdapter(int layoutResId, List<T> data) {
super(layoutResId, data);
}
/**
* To bind different types of holder and solve different the bind events
*
* @param holder
* @param position
*/
@Override
public void onBindViewHolder(K holder, int position) {
super.onBindViewHolder(holder, position);
int viewType = holder.getItemViewType();
if (mItemTouchHelper != null && itemDragEnabled) {
if (mToggleViewId != NO_TOGGLE_VIEW) {
View toggleView = holder.getView(mToggleViewId);
if (toggleView != null) {
toggleView.setTag(Tag, holder);
if (mDragOnLongPress) {
toggleView.setOnLongClickListener(mOnToggleViewLongClickListener);
} else {
toggleView.setOnTouchListener(mOnToggleViewTouchListener);
}
}
} else {
holder.itemView.setTag(Tag, holder);
holder.itemView.setOnLongClickListener(mOnToggleViewLongClickListener);
}
}
}
/**
* 设置长按mToggleViewId触发拖动事件
* 如果未设置mToggleViewId,则在长按item时触发拖动事件
*
* @param toggleViewId the toggle view's id
*/
public void setToggleViewId(int toggleViewId) {
mToggleViewId = toggleViewId;
}
/**
* 如果为true,则拖动事件将在长按时触发,否则将在点击时触发。
*
* @param longPress 默认为true
*/
public void setToggleDragOnLongPress(boolean longPress) {
mDragOnLongPress = longPress;
if (mDragOnLongPress) {
mOnToggleViewTouchListener = null;
mOnToggleViewLongClickListener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (mItemTouchHelper != null && itemDragEnabled) {
mItemTouchHelper.startDrag((RecyclerView.ViewHolder) v.getTag(Tag));
}
return true;
}
};
} else {
mOnToggleViewTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN