实现长按条目调整位置和侧滑删除功能,核心是ItemTouchHelper类,直接贴代码了。
DefaultItemTouchHelper
public class DefaultItemTouchHelper extends ItemTouchHelper {
private DefaultItemTouchHelperCallback mDefaultItemTouchHelperCallback;
private OnItemMoveListenter itemMoveListenter;
public DefaultItemTouchHelper() {
this(new DefaultItemTouchHelperCallback());
}
private DefaultItemTouchHelper(DefaultItemTouchHelperCallback callback) {
super(callback);
this.mDefaultItemTouchHelperCallback = callback;
}
public void setItemMoveListenter(OnItemMoveListenter itemMoveListenter) {
mDefaultItemTouchHelperCallback.setCallback(itemMoveListenter);
}
/**
* 是否可以滑动删除
* @param b
*/
public void setItemViewSwipeEnabled(boolean b) {
mDefaultItemTouchHelperCallback.setItemViewSwipeEnabled(b);
}
/**
*是否可以长按
*/
public void setLongPressDragEnabled(boolean b) {
mDefaultItemTouchHelperCallback.setLongPressDragEnabled(b);
}
}
DefaultItemTouchHelperCallback
public class DefaultItemTouchHelperCallback extends ItemTouchHelper.Callback {
private OnItemMoveListenter callback;
private boolean isLongPressDragEnabled;
private boolean isItemViewSwipeEnabled;
public void setCallback(OnItemMoveListenter callback) {
this.callback = callback;
}
/**
* 返回一个复合标志,该标志定义每个状态下启用的移动方向
* @param recyclerView
* @param viewHolder
* @return
*/
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
if (layoutManager instanceof GridLayoutManager) {
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager;
if (linearLayoutManager.getOrientation() == LinearLayoutManager.HORIZONTAL) {
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
int swipeFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
return makeMovementFlags(dragFlags, swipeFlags);
} else {
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
int swipeFlags = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
return