以为RecycleView没有item监听 所以我们需要通过接口回调的方式来实现
//先写一个接口
public interface ItemTouchHelperAdapter {
void onItemMove(int fromPosition,int toPosition);//移动时方法
void onItemDissmiss(int position);//消失时方法
}
//在RecycleView适配器中实现ItemTouchHelperAdapter接口 完成这两个方法
@Override
public void onItemMove(int fromPosition, int toPosition) {
//swap 交换
Collections.swap(list,fromPosition,toPosition);
//注意是Moved的刷新
notifyItemMoved(fromPosition,toPosition);
}
@Override
public void onItemDissmiss(int position) {
list.remove(position);
notifyItemRemoved(position);
}
//在主类中
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;//允许上下拖动
int swipeFlags = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;//允许左右拖动 只写左就只允许左拖动
return makeMovementFlags(dragFlags,swipeFlags);
}
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder1) {
adapter.notifyItemMoved(viewHolder.getAdapterPosition(),viewHolder1.getAdapterPosition());
return true;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
adapter.onItemDissmiss(viewHolder.getAdapterPosition());
}
});
itemTouchHelper.attachToRecyclerView(rv);