Как исправить исключение IndexOutOfBoundsException в функции onRowMoved адаптера RecyclerView? ⇐ JAVA
Как исправить исключение IndexOutOfBoundsException в функции onRowMoved адаптера RecyclerView?
У меня возникла проблема с реализацией функции onRowMoved в моем адаптере RecyclerView. Эта функция отвечает за управление перемещением строк в RecyclerView при перетаскивании элементов. Однако я столкнулся с ошибкой java.lang.IndexOutOfBoundsException с сообщением «Индекс -1 выходит за пределы для длины 8».
val touchHelper = ItemTouchHelper(объект: ItemTouchHelper.Callback() { ... переопределить удовольствие onMove( recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, цель: RecyclerView.ViewHolder ): Логическое значение { вернуть imagesAdapter?.onRowMoved(viewHolder, target)?: false } }) весело onRowMoved( fromViewHolder: RecyclerView.ViewHolder, toViewHolder: RecyclerView.ViewHolder ): Логическое значение { val fromPosition = fromViewHolder.bindingAdapterPosition val toPosition = toViewHolder.bindingAdapterPosition val imagesSize = this.images.size if (fromPosition < imagesSize && toPosition < imagesSize) { если (fromPosition < toPosition) { for (я в fromPosition до toPosition) { Collections.swap(this.images, i, i + 1) } notifyItemMoved (fromPosition, toPosition) } еще { for (i in fromPosition downTo toPosition + 1) { Collections.swap(this.images, i, i - 1) } notifyItemMoved (toPosition, fromPosition) } Обработчик().postDelayed({ уведомитьDataSetChanged() }, 1000) вернуть истину } вернуть ложь }
Журналы сбоев следующие:
Неустрашимое исключение: java.lang.IndexOutOfBoundsException: индекс -1 выходит за пределы для длины 8 в jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) в jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) в jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266) в java.util.Objects.checkIndex(Objects.java:359) в java.util.ArrayList.get(ArrayList.java:434) в java.util.Collections.swap(Collections.java:548) на com....newProduct.NewProductImagesAdapter.onRowMoved(NewProductImagesAdapter.kt:208) на com....newProduct.NewProduct$createImagesAdapter$touchHelper$1.onMove(NewProduct.kt:927) в androidx.recyclerview.widget.ItemTouchHelper.moveIfNecessary (ItemTouchHelper.java:891) в androidx.recyclerview.widget.ItemTouchHelper$2.onTouchEvent(ItemTouchHelper.java:390) в androidx.recyclerview.widget.RecyclerView.dispatchToOnItemTouchListeners (RecyclerView.java:3515) в androidx.recyclerview.widget.RecyclerView.onTouchEvent(RecyclerView.java:3713) в android.view.View.dispatchTouchEvent(View.java:14879)
У меня возникла проблема с реализацией функции onRowMoved в моем адаптере RecyclerView. Эта функция отвечает за управление перемещением строк в RecyclerView при перетаскивании элементов. Однако я столкнулся с ошибкой java.lang.IndexOutOfBoundsException с сообщением «Индекс -1 выходит за пределы для длины 8».
val touchHelper = ItemTouchHelper(объект: ItemTouchHelper.Callback() { ... переопределить удовольствие onMove( recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, цель: RecyclerView.ViewHolder ): Логическое значение { вернуть imagesAdapter?.onRowMoved(viewHolder, target)?: false } }) весело onRowMoved( fromViewHolder: RecyclerView.ViewHolder, toViewHolder: RecyclerView.ViewHolder ): Логическое значение { val fromPosition = fromViewHolder.bindingAdapterPosition val toPosition = toViewHolder.bindingAdapterPosition val imagesSize = this.images.size if (fromPosition < imagesSize && toPosition < imagesSize) { если (fromPosition < toPosition) { for (я в fromPosition до toPosition) { Collections.swap(this.images, i, i + 1) } notifyItemMoved (fromPosition, toPosition) } еще { for (i in fromPosition downTo toPosition + 1) { Collections.swap(this.images, i, i - 1) } notifyItemMoved (toPosition, fromPosition) } Обработчик().postDelayed({ уведомитьDataSetChanged() }, 1000) вернуть истину } вернуть ложь }
Журналы сбоев следующие:
Неустрашимое исключение: java.lang.IndexOutOfBoundsException: индекс -1 выходит за пределы для длины 8 в jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) в jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) в jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266) в java.util.Objects.checkIndex(Objects.java:359) в java.util.ArrayList.get(ArrayList.java:434) в java.util.Collections.swap(Collections.java:548) на com....newProduct.NewProductImagesAdapter.onRowMoved(NewProductImagesAdapter.kt:208) на com....newProduct.NewProduct$createImagesAdapter$touchHelper$1.onMove(NewProduct.kt:927) в androidx.recyclerview.widget.ItemTouchHelper.moveIfNecessary (ItemTouchHelper.java:891) в androidx.recyclerview.widget.ItemTouchHelper$2.onTouchEvent(ItemTouchHelper.java:390) в androidx.recyclerview.widget.RecyclerView.dispatchToOnItemTouchListeners (RecyclerView.java:3515) в androidx.recyclerview.widget.RecyclerView.onTouchEvent(RecyclerView.java:3713) в android.view.View.dispatchTouchEvent(View.java:14879)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение