У меня есть 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
Есть ли какой-либо метод \ свойство, чтобы не изменять позиции других представлений при обмене элементами в сетке?