RecyclerView ItemTouchHelper Action Drag Ended

后端 未结 2 1608
太阳男子
太阳男子 2021-02-05 08:17

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

相关标签:
2条回答
  • 2021-02-05 08:51

    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")
                }
            }
        }
    
    0 讨论(0)
  • 2021-02-05 09:07

    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
    }
    
    0 讨论(0)
提交回复
热议问题