Android LRecyclerView 实现侧滑菜单、长按拖拽等功能

LRecyclerView能做什么?

如果你之前没有听说过LRecyclerView,那么请参考: Android LRecyclerView实现下拉刷新,滑动到底部自动加载更多

经过再三思考,同时也为了大家使用方便,LRecyclerView集成了SwipeMenu系列功能,包括Item侧滑菜单、长按拖拽Item,滑动删除Item等功能。

demo apk下载地址:点我下载

功能演示

本次新增SwipeMenu系列功能描述如下:

  1. 左右两侧都有菜单;
  2. 根据ViewType显示菜单;
  3. 长按拖拽Item(List),与菜单结合;
  4. 长按拖拽Item(Grid);
  5. 滑动删除Item;
  6. 指定某个Item不能拖拽或者不能滑动删除;
  7. 用SwipeMenuLayout实现你自己的侧滑。

项目地址:https://github.com/jdsjlzx/LRecyclerView

SwipeMenuAdapter

为了实现SwipeMenu的功能,此次新增了一个SwipeMenuAdapter类。

SwipeMenuAdapter与library中已经存在的LRecyclerViewAdapter会不会冲突呢?答案是不会。SwipeMenuAdapter是用户级别的基类adapter,也就是用户需要继承SwipeMenuAdapter去实现自己的adapter,还像之前那样使用即可。

SwipeMenuAdapter类的定义:

实现自己的MenuAdapter:

是不是很方便?MenuAdapter基本的功能都满足了,直接拷贝到项目中即可使用。

上面说了那么多,关键的也就这几句:

下面具体分析每个功能。

左右两侧都有菜单

效果图:

具体使用步骤如下。

    • 为SwipeRecyclerView的Item创建菜单

      其中swipeMenuCreator和menuItemClickListener代码如下:

      从上面代码可以看出,swipeMenuCreator完成了左右菜单的创建,menuItemClickListener实现了菜单的点击事件。

      需要注意的是,LRecyclerView提供了下面两个方法,具体使用请详见demo。

      openLeftMenu:打开item的左边菜单 openRightMenu:打开item的右边菜单

      这里关键的就是这个position(详细请参考demo),先埋下个伏笔,后面介绍。

      根据ViewType显示菜单

      效果图:

      根据ViewType决定SwipeMenu在哪一行出现,可以左侧,可以右侧。

      自定义MenuViewTypeAdapter,代码如下:

      在实现swipeMenuCreator 时,需要根据ItemViewType值来决定是否创建左右菜单。

      长按拖拽Item(List),与菜单结合

      效果图:

      关键代码:

      onItemMoveListener具体如下:

      注意下面代码:

      > 关于position的位置,为了大家使用方便,特在LRecyclerViewAdapter中提供了一个方法getAdapterPosition(boolean isCallback, int position)。

      • isCallback 含义:position是否接口回调中带来的
      • position 含义:如果不是接口回调,就是用户自己指定的position
      • getAdapterPosition(boolean isCallback, int position)只用于非LRecyclerViewAdapter提供的接口。

      举例说明:

    • setOnItemMoveListener不是 LRecyclerViewAdapter自带接口(也就是内部方法),需要调用getAdapterPosition方法获得正确的position
    • 如setOnItemClickLitener 是 LRecyclerViewAdapter自带接口,接口里面自带了position,用户就不必调用getAdapterPosition方法,直接使用就可以了。

      长按拖拽Item(Grid)

      效果图:

      与list功能一样,只是布局不一样。

      滑动直接删除Item

      效果图:

      注意:

      滑动删除和滑动菜单是互相冲突的,两者只能出现一个。

      关键代码:

      按照配置就可以实现滑动删除。

      指定某个Item不能拖拽或者不能滑动删除

      效果图:

      关键代码:

      其中,onItemMovementListener具体实现如下:

      onItemMoveListener具体实现如下:

      通过代码中的注释,就可以明白了,一切尽在代码中。

      用SwipeMenuLayout实现你自己的侧滑

      效果图:

      这个与LRecyclerView关系不大,但是与SwipeMenu关系密切。为了实现滑动菜单的功能,定义了SwipeMenuLayout。

      SwipeMenuLayout类的定义:

      在开头提到的SwipeMenuAdapter的

      layout_recyclerview_swipe_item_default.xml

看来这个布局,你是不是有种恍然大悟的感觉呢?左右滑动就是通过SwipeMenuView来实现的。

项目地址:https://github.com/jdsjlzx/LRecyclerView,欢迎Star!

如果你觉得这篇文章对你有用,那么赞一个或者留个言吧!

另外下载Demo有意外收获啊!

如果你对LRecyclerView有什么好的想法或者建议,期待你的留言!

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

任选一种支付方式

2 2 收藏 评论

关于作者:一叶飘舟

目标赋予我们生命的意义和目的。有了目标,我们才会把注意力集中在追求喜悦,而不是在避免痛苦上。 个人主页 · 我的文章 · 3 ·  

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部