Индекс вне границы: ArrayList - PullRequest
0 голосов
/ 21 октября 2018

Проблема

Я реализовал режим множественного выбора для представления переработчика с использованием внешней библиотеки.Теперь, чтобы убрать элементы из представления переработчика, я реализовал два цикла for.Первый цикл for удаляет элементы из SQLite, а второй цикл удаляет соответствующие представления из адаптера.Однако проблема возникает при удалении видов из адаптера.

         for (i in selectedCardItems!!.indices)  //selectedCardItems stores selected card position.
            {
                val index = selectedCardItems!![i]
                val noteRowID = listItems!![index]  //list items contains references to items in SQLite and is fed to recyclerview.setadapter = myAdapter(context,listitems)


                dbHandler!!.deleteNote(noteRowID.noteID!!)
            }




            for(i in selectedCardItems!!.indices)
            {
                val index = selectedCardItems!![i]
                listItems!!.removeAt(i)  //problem starts here, due to mismatched indexes.

                adapter!!.notifyItemRemoved(i)
            }

            if(dbHandler!!.trashedNotesCount() == 0)
            {
                trashedRecyclerView!!.visibility = View.GONE
                emptyTrashImg!!.visibility = View.VISIBLE
                emptyTrashMsg!!.visibility = View.VISIBLE
            }

            selectedCardItems!!.clear()  //once all operation is done,remove card positions from this ArrayList.
        }

И listitems, и selectedCardPosition имеют тип ArrayList.Я знаю, что как только элемент из ArrayList удаляется из индекса, более высокий индекс элемента индекса автоматически перемещается в более низкий индекс.Какой эффективный способ решить эту проблему?

То, что я пробовал: A BAD Исправление заключается в основном удалить второй цикл for, который удаляет представления, и заменить его наadaptor.notifyDataSetChanged (), который также удаляет удаление анимации.

1 Ответ

0 голосов
/ 21 октября 2018

Если я правильно понимаю ваш вопрос, проблема возникает из-за того, что удаления из списка разрушают первоначальную индексацию. Если это так, вы должны начать удаление с более высокого индекса, а затем перейти вниз.Так что сортируйте список по убыванию перед циклом:

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