ItemTouchHelper с SpannedGridLayoutManager - проблемы с RecyclerView

Я столкнулся с проблемой с ItemTouchHelper в сочетании с SpannedGridLayoutManager в моем RecyclerView, перетаскивание заканчивается преждевременно при перетаскивании на элемент рядом с перетаскиваемым. Я знаю, что это глючный менеджер компоновки, потому что он работает с другими менеджерами компоновки без проблем.

Кто-нибудь уже разобрался с этим?

1 ответ

Обратный вызов onSelectedChanged(RecyclerView.ViewHolder, int) предоставляет информацию о текущем actionState: - ACTION_STATE_IDLE: - ACTION_STATE_DRAG - ACTION_STATE_SWIPE

Таким образом, вы можете отслеживать, изменился ли порядок, и когда состояние меняется на ACTION_STATE_IDLE, вы можете делать то, что вам нужно!

Реализуйте класс обратного вызова, как это.

class CardsTouchHelperCallback extends ItemTouchHelper.Callback {

...
@Override
    public boolean onMove(RecyclerView recyclerView, 
RecyclerView.ViewHolder viewHolder,
                      RecyclerView.ViewHolder target) {

    int fromPosition = viewHolder.getAdapterPosition();
    int toPosition = target.getAdapterPosition();

    dragFrom =  fromPosition;
    dragTo = toPosition;

    mOrderChanged = true;

    return false;
}

@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
    super.onSelectedChanged(viewHolder, actionState);

    if (actionState == ItemTouchHelper.ACTION_STATE_IDLE && mOrderChanged) {
        //doSomething();
        touchHelperAdapter.onItemMove(dragFrom, dragTo);
        mOrderChanged = false;
    }
 }
}
Другие вопросы по тегам