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