Android ItemTouchHelperAdapter拖拽完成后更新位置
时间: 2023-05-26 22:03:50 浏览: 72
当Android ItemTouchHelperAdapter完成拖拽时,可以通过以下步骤更新位置:
1. 在您的适配器中创建方法`onItemMove(int fromPosition, int toPosition)`的实现。此方法将使用`notifyItemMoved(int fromPosition, int toPosition)`通知适配器要刷新的项目已移动到新位置。
2. 在您的`RecyclerView`项目中设置`ItemTouchHelper`并使用您的适配器类实例化它。这将使您的项目可被拖拽和移动。
3. 在您的`ItemTouchHelper.Callback`类中覆盖`onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target)`方法。当项目已移动到新位置时,此方法会被调用。使用`adapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition())`调用适配器中的`onItemMove()`方法。
4. 在适配器中实现`onItemMoved(int fromPosition, int toPosition)`方法,并更新列表数据项的位置。
例如,以下是适配器中的`onItemMove()`和`onItemMoved()`方法的实现:
```java
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> implements ItemTouchHelperAdapter {
//...
public void onItemMove(int fromPosition, int toPosition) {
//重新排列列表中的项目
Collections.swap(dataList, fromPosition, toPosition);
notifyItemMoved(fromPosition, toPosition);
}
public void onItemMoved(int fromPosition, int toPosition) {
//更新dataList中每个项目的位置
for (int i = 0; i < dataList.size(); i++) {
dataList.get(i).setPosition(i);
}
}
//...
}
```
在`ItemTouchHelper.Callback`中的`onMoved()`方法中,调用适配器中的`onItemMoved()`方法来更新列表数据项的位置:
```java
public class MyCallback extends ItemTouchHelper.Callback {
private final ItemTouchHelperAdapter mAdapter;
public MyCallback(ItemTouchHelperAdapter adapter) {
mAdapter = adapter;
}
//...
@Override
public void onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
mAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
mAdapter.onItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
}
//...
}
```
完成以上步骤后,拖拽完成后您的项目将自动更新位置。