recycleView 改变item 位置
时间: 2024-05-13 20:15:40 浏览: 83
Android Recycleview 固定item并且可拖拽
要改变 RecyclerView 中 item 的位置,可以使用 ItemTouchHelper 类来实现拖放和滑动删除等操作。具体步骤如下:
1. 创建一个 Callback 对象,并实现其中的 onMove 和 onSwiped 方法,分别处理拖拽和滑动删除操作。
```
ItemTouchHelper.Callback callback = new ItemTouchHelper.Callback() {
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
int swipeFlags = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
return makeMovementFlags(dragFlags, swipeFlags);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
RecyclerView.ViewHolder target) {
adapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
return true;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
adapter.notifyItemRemoved(viewHolder.getAdapterPosition());
}
};
```
2. 创建 ItemTouchHelper 对象并将其与 RecyclerView 关联。
```
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
itemTouchHelper.attachToRecyclerView(recyclerView);
```
3. 在 RecyclerView 的 Adapter 中实现 onBindViewHolder 方法,并为 ViewHolder 添加拖拽手势。
```
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
// 添加拖拽手势
holder.itemView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) {
itemTouchHelper.startDrag(holder);
}
return false;
}
});
}
```
这样就可以通过拖拽来改变 RecyclerView 中 item 的位置了。
阅读全文