美文网首页高级UIAndroid开发经验谈程序员
真滴牛逼,轻松实现RecyclerView 拖动多选功能

真滴牛逼,轻松实现RecyclerView 拖动多选功能

作者: Android开发架构 | 来源:发表于2019-07-03 15:35 被阅读178次

    文件选择在我们日常开发中是一个比较常见的功能,分为文件单选和多选,单选比如头像上传,多选比如相册中的多图选择、多文件选择删除等。在Android开发中,系统为我们提供了单选/多选的控件,单选用RadioButton/RadioGroup(🔘),多选则用CheckBox(☑️)。这些都是比较基础的,相信才入门的应该都会已掌握。

    抛开单选不说,今天来说说文件多选,在APP上,多选其实使用起来比较麻烦,我们的一个一个地勾选Checkbox(☑️),如果文件有几十个,是不是非常耗费时间?体验也不好,其实在pc 端是不存在这个问题,在pc 端,我们只需拖动鼠标,就能一下将我们需要选择的多个文件选中。APP是能像pc 一样拖动来实现多选吗?答案是肯定的,今天就为大家介绍一个牛逼的库,drag-select-recyclerview,可以轻松实现recyclerView 拖动多选。

    drag-select-recyclerview

    github地址: https://github.com/afollestad/drag-select-recyclerview

    如果你使用过google 相册,相信你记得它有一个非常方便的功能,就是选择多张图片的时候,可以在屏幕上拖动手指来完成照片多选。drag-select-recyclerview 就能让你在自己的app中轻松实现这个功能。

    DragSelectTouchListener 是这个库的核心类,该库将会处理拖动事件拦截和自动滚动逻辑,当拖动到recyclerView 顶部的时候,列表将继续滚动,反之亦然。

    使用的时候,将DragSelectTouchListener attache 到 RecyclerView,它将会处理触摸事件的拦截,然后通过一个receiver 来返回结果和更新UI。

    val receiver: DragSelectReceiver = // ...val touchListener = DragSelectTouchListener.create(context, receiver)
    

    效果图

    如何使用?

    添加依赖:

    dependencies {
    
      implementation 'com.afollestad:drag-select-recyclerview:2.4.0'
    }
    

    receiver代码如下:

    class MyReceiver : DragSelectReceiver {
    
      override fun setSelected(index: Int, selected: Boolean) {
        // do something to mark this index as selected/unselected
        if(selected && !selectedIndices.contains(index)) {
          selectedIndices.add(index)
        } else if(!selected) {
          selectedIndices.remove(index)
        }
      }
      
      override fun isSelected(index: Int): Boolean {
        // return true if this index is currently selected
        return selectedItems.contains(index)
      }
      
      override fun isIndexSelectable(index: Int): Boolean {
        // if you return false, this index can't be used with setIsActive()
        return true
      }
    
      override fun getItemCount(): Int {
        // return size of your data set
        return 0
      }
    }
    

    DragSelectReceiver 是一个接口,在实际应用中,我们可以让Adapter 实现DragSelectReceiver,这样,记录选中与未选中就很方便。

    结合RecyclerView使用如下:

    val recyclerView: RecyclerView = // ...
    val receiver: DragSelectReceiver = // ...
    
    val touchListener = DragSelectTouchListener.create(context, receiver)
    recyclerView.addOnItemTouchListener(touchListener) // important!!
    
    // true for active = true, 0 is the initial selected index
    touchListener.setIsActive(true, 0)
    

    通过设置setIsActive ,当用户长按列表Item时,触发事件开始拖动选择。

    更多使用方法请看Github,或者运行Demo查看。

    是不是很酷?赶快引入自己的项目试试吧!

    Android开发资料+面试架构资料 免费分享 点击链接 即可领取

    《Android架构师必备学习资源免费领取(架构视频+面试专题文档+学习笔记)》

    相关文章

      网友评论

        本文标题:真滴牛逼,轻松实现RecyclerView 拖动多选功能

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