2017-02-15 9 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は1回だけ(iと同じ)初期化され、その値は次の繰り返しに使用されます。したがって、リストのサイズが最初は4の場合、dataLengthは4になり、リストサイズは減少し続け、IndexOutOfBoundsExceptionが発生します。

変更のステートメントについては、以下の通り:あなたはinterationにforクラッシュを項目durateを削除すると

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

問題がformComments.remove(i);です。 あなたはこのように、enter code hereによってfor置き換える必要があります。

 

    Iterator iterator = mComments.iterator(); 
    while (iterator.hasNext()) { 
     RoomMessage item = iterator.next(); 
     mComments.remove(item); 
     mAdapter.notifyDataSetChanged(); 
    } 
関連する問題