拖拽item 进入recycleview
时间: 2023-07-09 08:45:29 浏览: 97
要实现这个功能,你需要在 Recycleview 的 Adapter 中实现以下几个方法:
1. onCreateViewHolder(): 创建一个 ViewHolder 对象,并将其绑定到一个 item layout 上。
2. onBindViewHolder(): 将数据绑定到 ViewHolder 上。
3. onItemMove(): 当用户拖动一个 item 时,调用该方法来通知 Adapter。
在 onItemMove() 方法中,你需要更新数据集合中的 item 顺序,并调用 notifyItemMoved() 方法来更新 Recycleview 的显示。同时,你还需要实现一个 ItemTouchHelper.Callback 对象,用于监听用户拖动 item 的动作,并将其与 Recycleview 绑定。
下面是一个伪代码示例:
```
class MyAdapter extends RecyclerView.Adapter<MyViewHolder> implements ItemTouchHelper.Callback {
List<Item> mData;
// ...
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// 创建 ViewHolder 对象,并将其绑定到一个 item layout 上。
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
// 将数据绑定到 ViewHolder 上。
}
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
// 更新数据集合中的 item 顺序。
Collections.swap(mData, fromPosition, toPosition);
// 更新 Recycleview 的显示。
notifyItemMoved(fromPosition, toPosition);
return true;
}
// ...
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
// ...
}
}
ItemTouchHelper.Callback callback = new ItemTouchHelper.Callback() {
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
// ...
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return mAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
// ...
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
itemTouchHelper.attachToRecyclerView(recyclerView);
```
需要注意的是,以上代码仅供参考,具体实现方式可能会因为业务需求而有所不同。
阅读全文