У меня есть RecyclerView, который представляет собой список введенных пользователем «шагов», и эти шаги могут быть в любом порядке, который пользователь хочет перетаскивать. У меня есть TextView, который показывает положение адаптера (порядок шагов), но мне трудно обновлять его после перетаскивания.
Используя ItemTouchHelper
, у меня есть следующее:
override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean
{
val fromPosition = viewHolder.adapterPosition
val toPosition = target.adapterPosition
if(fromPosition < toPosition)
{
for(i in fromPosition until toPosition)
{
Collections.swap(data, i, i + 1)
data[toPosition].number = toPosition.toLong()
data[fromPosition].number = fromPosition.toLong()
}
}
else
{
for(i in toPosition downTo fromPosition)
{
Collections.swap(data, i, i - 1)
data[toPosition].number = toPosition.toLong()
data[fromPosition].number = fromPosition.toLong()
}
}
notifyItemMoved(fromPosition, toPosition)
notifyItemChanged(toPosition)
notifyItemChanged(fromPosition)
return true
}
Но он генерирует исключение IndexOutOfBoundsException, если я перетаскиваю какой-либо элемент на первую позицию, и данные внутри EditText не сохраняются при перемещении или копируются в другой EditText.