Есть ли функция для получения нового порядка элементов RecyclerView после изменения его порядка перетаскиванием? - PullRequest
0 голосов
/ 06 апреля 2019

Я создаю приложение для фотокниги, мне нужно изменить порядок выбранных изображений в RecyclerView, используя перетаскивание, как это

пример

На самом деле я перетаскиваю, но не знаю, как получить новый заказ!

Я пытался получить доступ к списку внутри моего адаптера, но иногда он верен, а иногда нет

for (int i = 0; i < adapter.Hunts.size(); i++) {
            Log.d(TAG, "onMove: "+i+"  "+Hunts.get(i).getName());
}

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

1 Ответ

0 голосов
/ 06 апреля 2019

Это сообщение решило мою проблему здесь

проблема была внутри моего ItemTouchHelper

Я использовал

public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
                Collections.swap(Hunts, viewHolder.getAdapterPosition(), target.getAdapterPosition());

                adapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
                return true;
            }

Это должно быть

public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
                int fromPosition = viewHolder.getAdapterPosition();
                int toPosition = target.getAdapterPosition();
                if (fromPosition < toPosition) {
                    for (int i = fromPosition; i < toPosition; i++) {
                        Collections.swap(Hunts, i, i + 1);
                    }
                } else {
                    for (int i = fromPosition; i > toPosition; i--) {
                        Collections.swap(Hunts, i, i - 1);
                    }
                }

                adapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
                return true;
            }

чтобы изменить порядок элементов в моем списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...