首先需要一个ItemTouchHelper.Callback,所以我们自己来创建一个

(ItemTouchHelper.Callback是我们需要用到的ItemTouchHelper的回调接口),先完成设置拖拽或侧滑的方向的方法

public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {

/** 这里我只考虑了LinearLayoutManager的时候,如果说 * 需要用到比如GridLayoutManager等的时候,需要进行判断 / /这里设置拖拽的方向为上下,当然在网格布局里也可以设置上下左右随便/

final int drapFlag = ItemTouchHelper.UP | ItemTouchHelper.DOWN; /这里设置侧滑方向为左右,这里有个地方需要注意,当设置为0的时候,表示不支持拖拽 * 或者侧滑 /

final int swipFlag = ItemTouchHelper.RIGHT|ItemTouchHelper.LEFT; / 把方向参数设置进去*/

return makeMovementFlags(drapFlag,swipFlag);

}

然后我们需要弄一个接口出来,自定义一个接口,使我们的自定义recyclerview的adapter实现它

public interface OnMDListener {

boolean onItemMove(int fromPosition,int toPosition);

void onItemSwip(int position);

}

class VHAdapter extends RecyclerView.Adapter implements OnMDListener

同时把具体的方法实现写出来

@Overridepublic

boolean onItemMove(int fromPosition, int toPosition) { Collections.swap(nameArr,fromPosition,toPosition); notifyItemMoved(fromPosition,toPosition);

return true;

}

@Override

public void onItemSwip(int position) {

nameArr.remove(position);

notifyItemRemoved(position);

}

然后把我们自定义的这个接口传进我们的Callback中来,在对应的onMove和onSwip方法中去回调我们的自定义接口中的onItemMove和onItemSwip方法,整个的CallBack的代码如下

public class OwnTouchHelper extends ItemTouchHelper.Callback {

private OnMDListener listener;

public OwnTouchHelper(OnMDListener listener) {

this.listener = listener;

}

/** * 这个方法是用来设置我们拖动和侧滑的方向的 * @param recyclerView * @param viewHolder * @return /

@Override

public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {

/* 这里我只考虑了LinearLayoutManager的时候,如果说 * 需要用到比如GridLayoutManager等的时候,需要进行判断 /

/这里设置拖拽的方向为上下,当然在网格布局里也可以设置上下左右随便/

final int drapFlag = ItemTouchHelper.UP | ItemTouchHelper.DOWN; /这里设置侧滑方向为左右,这里有个地方需要注意,当设置为0的时候,表示不支持拖拽 * 或者侧滑 /

final int swipFlag = ItemTouchHelper.RIGHT|ItemTouchHelper.LEFT; / 把方向参数设置进去/

return makeMovementFlags(drapFlag,swipFlag);

}

/* * 当我们拖动item的时候,就会回调这个方法 * @param recyclerView * @param viewHolder * @param target * @return /

@Override

public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {

listener.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());

return true; }

/* * 当我们侧滑一个item的时候就会回调这个方法 * @param viewHolder * @param direction */

@Override

public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {

listener.onItemSwip(viewHolder.getAdapterPosition());

}

}

到这里基本上就已经能做到拖拽和侧滑删除的效果了,在初始化adapter的地方去进行绑定,首先创建一个ItemTouchHelper然后为其设置一个CallBack,然后使用ItemTouchHelper来绑定到我们的recyclerview

private void initRec() {

adapter = new VHAdapter();

rec.setAdapter(adapter);

rec.setHasFixedSize(true);

manager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false); rec.setLayoutManager(manager);

ItemTouchHelper.Callback callback = new OwnTouchHelper(adapter); ItemTouchHelper helper = new ItemTouchHelper(callback);

这一句很重要:

helper.attachToRecyclerView(rec);}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐