删除回收器视图项目的循环出错。 (使循环崩溃应用程序)

Error in loop to remove recycler view items. (making a loop crashes app)

现有代码:

int length = MyData.dates.length;
            for(int i = 0; i<length; i++){
                View x = mRecyclerView.getChildAt(i);
                if(x != null) {
                    length--;
                    //if(MyData.dates[i].before(today)){
                        RecyclerView.ViewHolder mViewHolder = mRecyclerView.findViewHolderForPosition(i);
                            TextView textViewName = (TextView) mViewHolder.itemView.findViewById(R.id.textViewMatch);
                            String selectedName = (String) textViewName.getText();
                            int selectedItemId = -1;
                            if (selectedName.equals(MyData.matchArray[i])) {
                                selectedItemId = MyData.id_[i];
                            }
                            removedItems.add(selectedItemId);
                            matches.remove(i);
                            mAdapter.notifyItemRemoved(i);
                    //}
                }
            }

当我 运行 该功能时,我的应用程序崩溃了。原因是:java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2

让i的值=1就完美的实现了这个功能。这是什么原因,我怎样才能使循环真正循环?

数组:

static String[] timingArray = {"JAN-15-2015","JAN-18-2015","JAN-25-2015","JAN-19-2015"};
static Integer[] id_ = {0, 1, 2, 3, 4};
static Date[] dates = new Date[timingArray.length];

我还有其他阵列,我认为它们不会造成麻烦。

项目基于教程:THIS

点击删除效果很好。

错误:

java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2
        at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
        at java.util.ArrayList.remove(ArrayList.java:403)
        at com.wc.gap.worldcupfixture.MainActivity.onSectionAttached(MainActivity.java:186)
        at com.wc.gap.worldcupfixture.MainActivity$PlaceholderFragment.onAttach(MainActivity.java:294)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
        at android.support.v4.app.FragmentManagerImpl.run(FragmentManager.java:454)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

如果你有循环

for( int i = 0; i < some.length; ++i ){
    // ...
    someList.remove( i );

}

这几乎与 运行 绑定到 IndexOutOfBounds 中,因为 someList 在每次迭代中都会缩短,并且 i 的连续值将超过最大可用索引。

可以通过使用递减的索引值来解决。