问题描述
recyclerview实现(2行4列)拖拽图标能调整顺序。同一行图标拖拽后保存无异常,不同行图标拖拽切换后保存出现顺序对不上的情况。
问题原因
关键代码:
Collections.swap(list,oldPosition,newPosition);
itemMoved时并非简单的将oldPosition与newPosition item进行替换,而是将所有移动的item依次进行替换。如果是同一行图标移动,移动过程中相邻的两个item都进行了交换,因此不会有问题。
解决方案
if (oldPosition < newPosition) {
for (int i = oldPosition; i < newPosition; i++) {
Collections.swap(list, i, i + 1);
}
} else {
for (int i = oldPosition; i > newPosition; i--) {
Collections.swap(list, i, i - 1);
}
}