public static abstract class ItemTouchHelper.Callback
extends Object

   ↳ androidx.recyclerview.widget.ItemTouchHelper.Callback

This class is the contract between ItemTouchHelper and your application. It lets you control which touch behaviors are enabled per each ViewHolder and also receive callbacks when user performs these actions.

To control which actions user can take on each view, you should override getMovementFlags(RecyclerView, ViewHolder) and return appropriate set of direction flags. (ItemTouchHelper.LEFT, ItemTouchHelper.RIGHT, ItemTouchHelper.START, ItemTouchHelper.END, ItemTouchHelper.UP, ItemTouchHelper.DOWN). You can use makeMovementFlags(int, int) to easily construct it. Alternatively, you can use ItemTouchHelper.SimpleCallback.

If user drags an item, ItemTouchHelper will call onMove(recyclerView, dragged, target). Upon receiving this callback, you should move the item from the old position (dragged.getAdapterPosition()) to new position (target.getAdapterPosition()) in your adapter and also call RecyclerView.Adapter.notifyItemMoved(int, int). To control where a View can be dropped, you can override canDropOver(RecyclerView, ViewHolder, ViewHolder). When a dragging View overlaps multiple other views, Callback chooses the closest View with which dragged View might have changed positions. Although this approach works for many use cases, if you have a custom LayoutManager, you can override chooseDropTarget(ViewHolder, java.util.List, int, int) to select a custom drop target.

When a View is swiped, ItemTouchHelper animates it until it goes out of bounds, then calls onSwiped(ViewHolder, int). At this point, you should update your adapter (e.g. remove the item) and call related Adapter#notify event.





Public constructors


Public methods

boolean canDropOver(RecyclerView recyclerView, RecyclerView.ViewHolder current, RecyclerView.ViewHolder target)

Return true if the current ViewHolder can be dropped over the the target ViewHolder.

RecyclerView.ViewHolder chooseDropTarget(RecyclerView.ViewHolder selected, List<RecyclerView.ViewHolder> dropTargets, int curX, int curY)

Called by ItemTouchHelper to select a drop target from the list of ViewHolders that are under the dragged View.

void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder)

Called by the ItemTouchHelper when the user interaction with an element is over and it also completed its animation.

int convertToAbsoluteDirection(int flags, int layoutDirection)

Converts a given set of flags to absolution direction which means ItemTouchHelper.START and ItemTouchHelper.END are replaced with ItemTouchHelper.LEFT and ItemTouchHelper.RIGHT depending on the layout direction.

static int convertToRelativeDirection(int flags, int layoutDirection)

Replaces a movement direction with its relative version by taking layout direction into account.

long getAnimationDuration(RecyclerView recyclerView, int animationType, float animateDx, float animateDy)

Called by the ItemTouchHelper when user action finished on a ViewHolder and now the View will be animated to its final position.

int getBoundingBoxMargin()

When finding views under a dragged view, by default, ItemTouchHelper searches for views that overlap with the dragged View.

static ItemTouchUIUtil getDefaultUIUtil()

Returns the ItemTouchUIUtil that is used by the ItemTouchHelper.Callback class for visual changes on Views in response to user interactions.

float getMoveThreshold(RecyclerView.ViewHolder viewHolder)

Returns the fraction that the user should move the View to be considered as it is dragged.

abstract int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder)

Should return a composite flag which defines the enabled move directions in each state (idle, swiping, dragging).

float getSwipeEscapeVelocity(float defaultValue)

Defines the minimum velocity which will be considered as a swipe action by the user.

float getSwipeThreshold(RecyclerView.ViewHolder viewHolder)

Returns the fraction that the user should move the View to be considered as swiped.

float getSwipeVelocityThreshold(float defaultValue)

Defines the maximum velocity ItemTouchHelper will ever calculate for pointer movements.

int interpolateOutOfBoundsScroll(RecyclerView recyclerView, int viewSize, int viewSizeOutOfBounds, int totalSize, long msSinceStartScroll)

Called by the ItemTouchHelper when user is dragging a view out of bounds.

boolean isItemViewSwipeEnabled()

Returns whether ItemTouchHelper should start a swipe operation if a pointer is swiped over the View.

boolean isLongPressDragEnabled()

Returns whether ItemTouchHelper should start a drag and drop operation if an item is long pressed.

static int makeFlag(int actionState, int directions)

Shifts the given direction flags to the offset of the given action state.

static int makeMovementFlags(int dragFlags, int swipeFlags)

Convenience method to create movement flags.

void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive)

Called by ItemTouchHelper on RecyclerView's onDraw callback.

void onChildDrawOver(Canvas c, RecyclerView recyclerView,