RecycleView之拖拽功能的实现
RecycleView拖拽功能是一个非常常见的一个功能,要想实现这个功能,其实不用耗费太多的时间,GOOGLE已经帮我们封装好了,我们只需要重写ItemTouchHelper这个类即可
话不多说,干货来了
package com.xxxx.adapter;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.ItemTouchHelper;
public class RecycleViewItemCallBack extends ItemTouchHelper.Callback {
public interface ItemTouchHelperAdapter {
/**
* 当Item被拖拽排序移动到另一个Item的位置的时候被回调
*
* @param fromPosition 起始位置
* @param toPosition 移动的位置
*/
void onItemMove(int fromPosition, int toPosition);
/***
* 侧滑删除时被调用
* @param position
*/
void onItemSwipe(int position);
/***
* 拖拽结束后进行回调
* @param recyclerView
* @param viewHolder
*/
void onItemClearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder);
/***
* item 被选中时的状态改变
* @param viewHolder
* @param actionState 当前Item的状态
* ItemTouchHelper.ACTION_STATE_IDLE 闲置状态
* ItemTouchHelper.ACTION_STATE_SWIPE 滑动中状态
* ItemTouchHelper.ACTION_STATE_DRAG 拖拽中状态
*/
void onItemSelectChange(RecyclerView.ViewHolder viewHolder, int actionState);
}
private ItemTouchHelperAdapter adapter;
/**
* 是否可以被滑动
*/
private Boolean isCanSwipe = true;
/**
* 是否可以被拖拽
*/
private Boolean isCanDrag = false;
public RecycleViewItemCallBack(ItemTouchHelperAdapter adapter) {
this.adapter = adapter;
}
public void setAdapter(ItemTouchHelperAdapter adapter) {
this.adapter = adapter;
}
/***
* 设置是否可以被滑动
* @param isCanSwipe
*/
public void setIsCanSwipe(Boolean isCanSwipe) {
this.isCanSwipe = isCanSwipe;
}
/***
* 当用户拖拽或滑动item时,设置拖拽或滑动的方向
* @param recyclerView
* @param viewHolder
* @return
*/
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
RecyclerView.LayoutManager layoutManager = recyclerView.