2017-02-15 4 views
0

Я пытался реализовать функцию как описание: каждый элемент в RecyclerView будет удален через 5 секунд. Мой код, как показано ниже:Извлечение элемента в RecyclerView

new CountDownTimer(60000, 1000) { 
    @Override public void onTick(long l) { 
     Log.v(TAG, "Ticking: " + l); 
     for (int i = 0, dataLength = mComments.size(); i < dataLength; i++{ 
      RoomMessage item = mComments.get(i); 
      // item.timeRemaining initial value is 5000 
      item.timeRemaining -= 1000; 
      if (item.timeRemaining <= 0) { 
       mComments.remove(i); 
       notifyItemRemoved(i); 
      } 
     } 
    } 
    @Override public void onFinish() { 
     start(); 
    } 
}.start(); 

В приложение падает с сообщением об ошибке говорит как java.lang.IndexOutOfBoundsException: Index: 4, Size: 4 Что было не так?

+0

вы можете предоставить полный отчет? –

+1

Если ваш размер 4, ваш индексный диапазон равен [0, 3]. Вы не можете удалить то, что не добавлено в список. – adnbsr

+0

@adnbsr Да, и я уверен, что диапазон находится в [0..3] –

ответ

3

Проблема в вашей петле.

for (int i = 0, dataLength = mComments.size(); i < dataLength; i++) 

DATALENGTH будет инициализирован только один раз (так же, как из I), а затем это значение будет использоваться для последующих итераций. Итак, если размер списка изначально равен 4, тогда длина данных будет равна 4, в течение которого размер списка будет уменьшаться, что приведет к возникновению IndexOutOfBoundsException.

Изменение для заявления, как показано ниже:

for (int i = 0; i < mComments.size(); i++) 
0

проблема mComments.remove(i); с for , когда удаляете элемент durate Интерактивного в for аварии. вам нужно заменить for на enter code here, как это:

 

    Iterator iterator = mComments.iterator(); 
    while (iterator.hasNext()) { 
     RoomMessage item = iterator.next(); 
     mComments.remove(item); 
     mAdapter.notifyDataSetChanged(); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^