RecyclerView 的拖动排序需要借助一下 ItemTouchHelper 这个类,ItemTouchHelper 类是 Google 提供的一个支持 RecyclerView 滑动和拖动的一个使用类,下面使用该类实现 RecyclerView 的滑动删除和拖动排序功能。首先大概介绍一下 ItemTouchHelper 的一个内部抽象类 Callback 类。
ItemTouchHelper.Callback
该类是ItemTouchHelper类中的一个静态抽象类,作用主要是将ItemTouchHelper于自己的应用联系在一起,让开发者通过ViewHolder控制每一个View的具体行为,接收用户的事件回调。该类里面有三个抽象方法:getMovementFlags、onMove、onSwiped。也是开发中经常要是用的。
getMovementFlags
该方法返回一个Flags表示Item的三种状态状态:idle(空闲)、 swiping(滑动)、dragging(拖动),根据RecyclerView不同的布局管理器,设置不同的滑动、拖动方向,一般使用makeMovementFlags(int dragFlags, int swipeFlags)方法返回,dragFlags表示拖动的方向,swipeFlags表示滑动的方向。
onMove
当ItemTouchHelper拖动一个Item时该方法将会被回调,Item将从旧的位置移动到新的位置,如果不拖动这个方法将从来不会调用,返回true表示Item已经被移动到新的位置。
|
|
onSwiped
当Item滑动的时候调用,如果不滑动该方法不会被调用,可通过direction做相应的判断执行某些操作。
|
|
此外经常使用的方法有 onSelectedChanged、clearView等方法。
onSelectedChanged
当item由静止状态变为滑动或拖动状态时调用此方法,可通过actionState判断Item在哪种状态下执行某些操作,重写该方法时必须调用其父类的该方法。
|
|
clearView
当与用户交互结束或相关动画完成之后被 调用该方法被调用。
RecyclerView实现拖动排序
RecyclerView的拖动排序需要借助一个 android.support.v7.widget.helper.ItemTouchHelper 这个类来实现,拖动排序重点是在接口里面的 onMove(int fromPosition, int toPosition) 方法,其在GridAdapter中的具体实现参考如下:
|
|
RecyclerView实现侧滑删除
RecyclerView的拖动排序需要借助一个 android.support.v7.widget.helper.ItemTouchHelper 这个类来实现,侧滑删除重点是在接口中的 onSwiped(int position),其在GridAdapter中的具体实现参考如下:
|
|
参考代码
ItemTouchHelper.Callback 的实现类
|
|
Adapter的实现
|
|
MainActivity
|
|
显示效果
GridLayoutManager | LinearLayoutManager |
---|---|
<完>