RecyclerView实现item拖动和滑动
创建ItemTouchHelper对象,重写内部方法。且绑定到RecyclerView.
itemTouchHelper.attachToRecyclerView(mRecycler);
方法说明:
-
getMovementFlags 设置哪些方向可以拖动和滑动
-
onMove 拖动item的回调方法,在这里面实现拖动需要做的事情,比如RecyclerView里面item的顺序交换,传入的参数是被拖动item的ViewHolder和目标ViewHolder
-
onSwiped 滑动item的回调方法,在这里面实现滑动需要做的事情,比如RecyclerView里面item的顺序交换
-
onSelectedChanged 在每次item的状态变成拖拽 (ACTION_STATE_DRAG) 或者 滑动 (ACTION_STATE_SWIPE)的时候被调用。这是把你的item view变成激活状态。
-
clearView item被放开或者动画完成的回调
-
isLongPressDragEnabled() 设置是否长按才进入拖动
-
isItemViewSwipeEnabled() 设置是否支持滑动操作
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback(){
//同来设置 拖拽移动,或移动删除
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
int swiped = ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT;
int dragFlags= ItemTouchHelper.UP | ItemTouchHelper.DOWN;
//第一个参数拖动,第二个删除侧滑
return makeMovementFlags(dragFlags, swiped);
}
//在拖动中不断的回调这个方法
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
int oldPosition = viewHolder.getAdapterPosition();
int newPosition = target.getAdapterPosition();
// 改变实际的数据集
Collections.swap(list,oldPosition ,newPosition );
adapter.notifyItemMoved(oldPosition, newPosition);
return false;
}
//处理侧滑
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
list.remove(position);
adapter.notifyItemRemoved(position);
}
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
if (actionState!=ItemTouchHelper.ACTION_STATE_IDLE){
viewHolder.itemView.setBackgroundColor(Color.parseColor("#303F9F"));
}
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
viewHolder.itemView.setBackgroundColor(Color.TRANSPARENT);
}
});