安卓利用draganddrop 给recycleview新增item
时间: 2023-09-12 22:10:27 浏览: 44
安卓中,RecyclerView 是一个常用的列表控件,并且支持拖拽和滑动删除等功能。下面是利用 Drag and Drop 实现 RecyclerView 新增 Item 的步骤:
1. 给 RecyclerView 添加一个 ItemTouchHelper 回调:
```java
ItemTouchHelper.Callback callback = new ItemTouchHelper.Callback() {
// 是否支持长按拖拽
@Override
public boolean isLongPressDragEnabled() {
return true;
}
// 是否支持滑动删除
@Override
public boolean isItemViewSwipeEnabled() {
return true;
}
// 拖拽操作回调
@Override
public int onDrag(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
// do something
}
// 滑动删除回调
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
// do something
}
};
ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
touchHelper.attachToRecyclerView(recyclerView);
```
2. 在 onDrag 回调中处理拖拽操作:
```java
@Override
public int onDrag(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
// 获取要拖拽的 Item 和目标 Item 的位置
int fromPosition = viewHolder.getAdapterPosition();
int toPosition = target.getAdapterPosition();
// 如果目标位置在当前位置之前,依次向前移动
if (fromPosition > toPosition) {
for (int i = fromPosition; i > toPosition; i--) {
Collections.swap(dataList, i, i - 1);
}
}
// 如果目标位置在当前位置之后,依次向后移动
else {
for (int i = fromPosition; i < toPosition; i++) {
Collections.swap(dataList, i, i + 1);
}
}
// 更新数据
adapter.notifyItemMoved(fromPosition, toPosition);
return 0;
}
```
3. 在 onSwiped 回调中处理滑动删除操作:
```java
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
// 获取要删除的 Item 的位置
int position = viewHolder.getAdapterPosition();
// 移除数据
dataList.remove(position);
// 更新数据
adapter.notifyItemRemoved(position);
}
```
这样,你就可以在 RecyclerView 上实现拖拽和滑动删除等操作了,具体效果可以参考 Android 官方示例:https://github.com/android/views-widgets-samples/tree/master/RecyclerViewDragAndDrop。如果你想在 RecyclerView 上新增 Item,可以在 onDrag 回调中处理,具体实现方式可以根据你的需求自行编写。