i试图实现一个功能作为描述:RecyClerview中的每个项目将在5秒后删除。我的代码如下:
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
一样怎么了?
问题在您的循环中。
for (int i = 0, dataLength = mComments.size(); i < dataLength; i++)
DataLength将仅初始化一次(与I相同),然后该值将用于下一个迭代。因此,如果列表大小最初是4,则数据列表将为4个列表大小将继续减小,这将导致 indexOutofBoundSexception 。
更改for语句如下:
for (int i = 0; i < mComments.size(); i++)
问题是 mComments.remove(i);
带有 for
删除持续时间介绍的物品时,for
崩溃。您需要由enter code here
替换for
,因此:
迭代器迭代器= mcomments.iterator(); while(iterator.hasnext()){ 室友项目= iterator.next(); mcomments.remove(item); madapter.notifydatasetchanged(); }