Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓drag&;与itemTouchHelper一起删除会导致IndexOutOfBoundsException_Android_Android Recyclerview_Indexoutofboundsexception - Fatal编程技术网

Android 安卓drag&;与itemTouchHelper一起删除会导致IndexOutOfBoundsException

Android 安卓drag&;与itemTouchHelper一起删除会导致IndexOutOfBoundsException,android,android-recyclerview,indexoutofboundsexception,Android,Android Recyclerview,Indexoutofboundsexception,我正在使用itemTouchHelper拖放/滑动以删除我的RecyclerView列表中的项目。切换/删除项目没有问题,但由于列表项目上的按钮是在调用onBindViewHolder时创建的,因此按钮“记住”的位置不会更新,这会导致许多错误(主要是IndexAutofBond异常)。请帮帮我,我没法用 例如,假设列表中有两项,A和B。 然后,我在它们之间切换得到B和A。 然后,单击B上的复选框(它会立即更新服务器)。 当我查看服务器时,A有一个复选框,而不是B(即使我单击了B),因为该位置在通

我正在使用itemTouchHelper拖放/滑动以删除我的RecyclerView列表中的项目。切换/删除项目没有问题,但由于列表项目上的按钮是在调用onBindViewHolder时创建的,因此按钮“记住”的位置不会更新,这会导致许多错误(主要是IndexAutofBond异常)。请帮帮我,我没法用

例如,假设列表中有两项,A和B。 然后,我在它们之间切换得到B和A。 然后,单击B上的复选框(它会立即更新服务器)。 当我查看服务器时,A有一个复选框,而不是B(即使我单击了B),因为该位置在通话中未更新:

mValues.get(position).put("checkbox",true)
代码如下:

@Override
    public boolean onItemMove(int fromPosition, int toPosition) {
        if (fromPosition < toPosition) {
            for (int i = fromPosition; i < toPosition; i++) {
                Collections.swap(mValues, i, i + 1);
                notifyItemMoved(i, i + 1);
            }
        } else {
            for (int i = fromPosition; i > toPosition; i--) {
                Collections.swap(mValues, i, i - 1);
                notifyItemMoved(i, i-1);
            }
        }

        return true;
    }
按钮“记住”的位置未更新

与ListView适配器中使用的视图“记住”位置的策略不同,RecyclerView中需要不同的方法

有关示例解决方案,请参见

@Override
    public void onItemDismiss(int position) {
        if (mValues.size() > position) {
            mValues.remove(position).deleteEventually();
            notifyItemRemoved(position);
        }
    }