美文网首页
RecyclerView使用ItemTouchHelper实现拖

RecyclerView使用ItemTouchHelper实现拖

作者: r09er | 来源:发表于2017-08-29 22:35 被阅读104次

    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的实现过程中也是完全参考的官方文档,如果有不懂的地方也可以尝试留言,我会尽力解答

    其实这也是我第一次不参考别的教程实现的一个小功能,阅读英文文档真没有想象中的困难.

    相关文章

      网友评论

          本文标题:RecyclerView使用ItemTouchHelper实现拖

          本文链接:https://www.haomeiwen.com/subject/augadxtx.html