Перетаскивание действия RecyclerView ItemTouchHelper завершено

Мне нужно слушать пользователя, когда он прекращает перетаскивать мой RecyclerView (когда он отбрасывает выбранный элемент).

Могу ли я получить эту информацию через свой ItemTouchHelper?

Спасибо за помощь

Марк: На данный момент я только сейчас, когда пользователь все еще перемещает элемент :)

@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder source, RecyclerView.ViewHolder target) {
    if (source.getItemViewType() != target.getItemViewType()) {
        return false;
    }
    // Notify the adapter of the move
    mAdapter.onItemMove(source.getAdapterPosition(), target.getAdapterPosition());
    return true;
}

person Sebastian    schedule 24.05.2016    source источник


Ответы (2)


ОБНОВЛЕНО

Сначала вы можете определить, где можно отбросить объект, реализовав canDropOver

@Override
public boolean canDropOver(RecyclerView recyclerView, RecyclerView.ViewHolder current, RecyclerView.ViewHolder target) {
    return current.getItemViewType() == getItemViewType();
}

Обновите свой адаптер, который хотите использовать onMove, это можно вызвать несколько раз во время операции перетаскивания

@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
    adapter.moveItem(viewHolder.getAdapterPosition(), target.getAdapterPosition());
    return true;
}

Чтобы определить, когда взаимодействие с элементом завершено, используйте clearView это для любого типа действия (перетаскивание или смахивание), даже если оно выполнено успешно (элемент перемещен или проведен пальцем) или отменен (элемент не перемещен или проведен)

@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    super.clearView(recyclerView, viewHolder);
    // Action finished
}
person cyroxis    schedule 25.05.2016
comment
добавил мой метод onMove, но как я могу получить информацию о том, что движение остановлено? он уведомляет только тогда, когда он все еще движется - person Sebastian; 25.05.2016
comment
@keytomake Я обновил свой ответ, чтобы добавить больше информации. Обычно используйте onMove для обновления адаптера и clearView, чтобы определить, когда перетаскивание завершено. - person cyroxis; 25.05.2016

Вы можете переопределить onSelectedChange в своей реализации ItemTouchHelper.Callback (), например:

 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")
            }
        }
    }
person Campino    schedule 16.09.2020
comment
viewHolder всегда равно нулю! - person Dr.jacky; 22.01.2021