I need to listen to the user when he stops drag and drop on my RecyclerView (when he drops the selected item).
Can I get this Information through my Ite
You can override onSelectedChange in your implementation of ItemTouchHelper.Callback(), such as:
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
super.onSelectedChanged(viewHolder, actionState)
when (actionState) {
ItemTouchHelper.ACTION_STATE_DRAG ->
Log.d("DragTest","Start to drag: $actionState")
ItemTouchHelper.ACTION_STATE_SWIPE ->
Log.d("DragTest","Start to swipe: $actionState")
ItemTouchHelper.ACTION_STATE_IDLE -> {
Log.d("DragTest","End action: $actionState")
}
}
}
UPDATED
First you can define where an object can be dropped by implementing canDropOver
@Override
public boolean canDropOver(RecyclerView recyclerView, RecyclerView.ViewHolder current, RecyclerView.ViewHolder target) {
return current.getItemViewType() == getItemViewType();
}
Update your adapter you want to use onMove
this can be called multiple during a drag operation
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
adapter.moveItem(viewHolder.getAdapterPosition(), target.getAdapterPosition());
return true;
}
To detect when an interaction with an element is over implement clearView
this is for any action type (drag or swipe) in the even that it succeeds (item moved or swiped) or is canceled (item not moved or swiped)
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
// Action finished
}