2017-02-15 116 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(); 
    } 
相關問題