ItemTouchHelper(实现RecyclerView上添加拖动排序与滑动删除的所有事情)

简单介绍:

ItemTouchHelper是一个强大的工具,它处理好了关于在RecyclerView上添加拖动排序与滑动删除的所有事情。它是RecyclerView.ItemDecoration的子类,也就是说它可以轻易的添加到几乎所有的LayoutManager和Adapter中。它还可以和现有的item动画一起工作,提供受类型限制的拖放动画等等。实现在线性列表(RecyclerView)中添加基本的拖拽&拖放与滑动删除

用法简介:

1:第一件事是RecyclerView的基本设置,修改build.gradle,添加RecyclerView的依赖。

2:找到RecyclerView为他设置布局管理器

3:为RecyclerView设置布局管理器

4:ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(adapter);

ItemTouchHelper touchHelper = new ItemTouchHelper(callback);

touchHelper.attachToRecyclerView(recyclerView);

使用这些进行关联,在callback的回调中进行相应的操作

使用 ItemTouchHelper 和 ItemTouchHelper.Callback

要使用ItemTouchHelper,你需要创建一个ItemTouchHelper.Callback。这个接口可以让你监听“move”与 “swipe”事件。这里还是控制view被选中的状态以及重写默认动画的地方。如果你只是想要一个基本的实现,有一个帮助类可以使用:SimpleCallback,。

一:启用基本的拖动排序与滑动删除需要重写的主要回调方法(ItemTouchHelper.Callback中的主要方法):

1:isLongPressDragEnabled()
(长按RecyclerView item拖动在isLongPressDragEnabled()中返回true,或调用ItemTouchHelper.startDrag(RecyclerView.ViewHolder) 方法来开始一个拖动)
2:isItemViewSwipeEnabled()
(要在view任意位置触摸事件发生时启用滑动操作,则直接在sItemViewSwipeEnabled()中返回true就可以了。或者,你也主动调用ItemTouchHelper.startSwipe(RecyclerView.ViewHolder) 来开始滑动操作)
3:getMovementFlags()
(指定可以支持的拖放和滑动方向)
4:onMove()
(用于通知底层数据的更新)
5:onSwiped()
(用于通知底层数据的更新)
6:onSelectedChanged(ViewHolder, int)
每次View Holder的状态变成拖拽 (ACTION_STATE_DRAG) 或者 滑动 (ACTION_STATE_SWIPE)的时候被调用。这是把你的item view变成激活状态的最佳地点。
7:clearView(RecyclerView, ViewHolder)
在一个view被拖拽然后被放开的时候被调用,同时也会在滑动被取消或者完成ACTION_STATE_IDLE)的时候被调用。这里是恢复item view idle状态的典型地方

简介callback中的onSelectedChanged(ViewHolder, int)和clearView(RecyclerView, ViewHolder)方法的用法

它被选择或者被清除的时候让你的View Holder去处理这些变化。为此,可以使用ItemTouchHelper.Callback提供的两个回调方法

1:定义一个接口,重写6.7方法

2:在callback的实现类中,调用接口中的方法

3:在适配器里面实现这个接口,为接口赋值,重接接口中定义的这两个方法

二:Callback准备好了之后,我们就可以创建我们的ItemTouchHelper并调用attachToRecyclerView(RecyclerView) 了:

ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(adapter);
ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
touchHelper.attachToRecyclerView(recyclerView);

gridView的一些特殊的处理

要支持grid布局,唯一需要的修改是向dragFlags中添加left和 right方向。

普通用法的代码:
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
gridView要做的修改:

但是,对于grid而言,滑动删除不是非常自然的设计,因此你可能需要这样来去掉此功能:

@Override
public int getMovementFlags(RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder) {
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN |
ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
int swipeFlags = 0;
return makeMovementFlags(dragFlags, swipeFlags);
}

  

 

  

 
 
上一篇:javascript全屏操作


下一篇:RecyclerViewItemTouchHelperDemo【使用ItemTouchHelper进行拖拽排序功能】