2017-02-15 133 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循环中。

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

dataLength将仅初始化一次(与i相同),然后该值将用于下一次迭代。因此,如果列表大小初始为4,那么dataLength将始终为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(); 
    } 
相关问题