Оставьте другие элементы на своих местах, поменяв местами 2 элемента - PullRequest
0 голосов
/ 11 марта 2019

У меня есть RecyclerView, использующий GridLayoutManager с spanCount, равным 2. Я использую реализацию ItemTouchHelper.Callback для обработки перетаскивания, чтобы позволить пользователю менять два элемента друг на друга.

Я устанавливаю флаги перемещения какпоказано ниже:

@Override public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
    int dragFlags = 0;
    int swipeFlags = 0;
    if (view.getSelectedItemId() == R.id.bottom_video_menu_one_cam) {
        swipeFlags |= ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
    } else {
        dragFlags |= ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
    }
    return makeMovementFlags(dragFlags, swipeFlags);
}

Когда метод onMove вызывает мой обратный вызов, я использую следующий код для замены двух элементов:

    @Override public void onItemMoved(int oldPosition, int newPosition) {
        Collections.swap(cameras, oldPosition, newPosition);
        notifyItemMoved(oldPosition, newPosition);
    }

Если я меняю элемент «A1» на «A2"элемент в сетке, все работало правильно:

До обмена:

A1 A2

B1 B2

=== замена A1 на A2 ===

После замены:

A2 A1

B1 B2

Iпытаюсь добиться следующей логики при переключении между строками:

до обмена:

A1 A2

B1 B2

=== замена A1 на B1 ===

Ожидаемый результат после замены:

B1 A2

A1 B2

Но вместо всей этой сеткипереупорядочивается и становится следующим:

A2 B1

A1 B2

Есть ли какой-либо метод \ свойство, чтобы не изменять позиции других представлений при обмене элементами в сетке?

...