删除RecyclerView中的项目

时间:2017-02-15 16:24:55

标签: java android android-recyclerview

我试图将功能作为描述来实现: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 出了什么问题?

2 个答案:

答案 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();
    }