我试图将功能作为描述来实现: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
出了什么问题?
答案 0 :(得分:3)
问题出在你的for循环中。
for (int i = 0, dataLength = mComments.size(); i < dataLength; i++)
dataLength将仅初始化一次(与i相同),然后该值将用于下一次迭代。因此,如果列表大小最初为4,则dataLength将为4,其中列表大小将继续减小,这将导致 IndexOutOfBoundsException 。
更改for语句如下:
for (int i = 0; i < mComments.size(); i++)
答案 1 :(得分:0)
问题是border-image-outset
mComments.remove(i);
当你删除一个项目时,for
会崩溃。
您需要将for
替换为for
,如下所示:
Iterator iterator = mComments.iterator(); while (iterator.hasNext()) { RoomMessage item = iterator.next(); mComments.remove(item); mAdapter.notifyDataSetChanged(); }