RecyclerView的item长按拖拽换位
ItemTouchHelper 是support.v7包中提供的一个类,在Api22的时候被加入,目的是为RecyclerView的item添加滑动(Swipe)和拖拽(drag&drop)功能.适用于系统提供的各种LayoutManager(Linear/Grid/StaggeredGrid),同时也可以用于自定义的LayoutManager,只需实现几个方法就能实现长按拖拽和侧滑的效果.
Demo地址:ItemTouchHelperSample
效果图
效果示例中只启用拖拽功能,滑动功能可以自行研究,其中官方文档是最好的参考ItemTouchHelper
实现步骤:
1.添加一个RecyclerView和一些假数据,应该都非常熟悉了
2.继承ItemTouchHelper.SimpleCallback类,并重写相应方法
注1:ItemTouchHelper.SimpleCallback是ItemTouchHelper.Callback的一个简单实现,只需传入允许拖拽和滑动的方向就能实现item的拖拽效果
注2: 默认情况下长按拖拽可以对整个RecyclerView的item生效,如果我们只想让用户按着拖拽按钮才能进行拖拽,需要重写isLongPressDragEnabled()方法,禁用item的长按拖拽功能
3.给拖拽的button设置OnTouchListener
3.1在拖拽监听中设置 itemTouchHelper.startDrag(holder);
4.初始化ItemTouchHelper,传入CallBack,与RecyclerView绑定,就完成了
注:默认情况下Callback的构造方法需要传入允许的拖拽方向和滑动方向,拖拽方向我们将4个方向都传入,但是由于我们不使用滑动功能,所以传入滑动方向的参数填0
只需4步,我们就可以通过ItemTouchHelper实现RecyclerView的长按拖拽换位功能,我在demo的实现过程中也是完全参考的官方文档,如果有不懂的地方也可以尝试留言,我会尽力解答
其实这也是我第一次不参考别的教程实现的一个小功能,阅读英文文档真没有想象中的困难.
网友评论