Android 使用ItemTouchHelper实现拖拽、左滑删除效果

最终效果

ItemTouchHelper实现拖拽、左滑删除效果

相关代码

    val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() {
            /**
             * 获取滑动响应的方向 包含两个 1.拖动dragFlags 2.侧滑删除swipeFlags
             * 代表只能向左侧侧滑删除 当前可以是这样ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT
             */
            override fun getMovementFlags(
                recyclerView: RecyclerView,
                viewHolder: RecyclerView.ViewHolder
            ): Int {
                //表示只能向左侧滑删除
                val swipeFlags = ItemTouchHelper.LEFT

                //拖动
                var dragFlags = 0
                if (rlv.layoutManager is GridLayoutManager) {
                    //如果是GridView样式,四个方向都支持拖动
                    dragFlags = ItemTouchHelper.UP or ItemTouchHelper.LEFT or
                            ItemTouchHelper.DOWN or ItemTouchHelper.RIGHT
                } else {
                    //如果是listView样式,只支持上下,不支持左右
                    dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN
                }
                return makeMovementFlags(dragFlags, swipeFlags)
            }

            /**
             * 拖动的时候不断回调此方法
             */
            override fun onMove(
                recyclerView: RecyclerView,
                viewHolder: RecyclerView.ViewHolder,
                target: RecyclerView.ViewHolder
            ): Boolean {
                //获取原来的位置
                val fromPosition = viewHolder.adapterPosition
                //获取目标的值
                val targetPosition = target.adapterPosition
                if (fromPosition < targetPosition) {
                    for (i in fromPosition until targetPosition) {
                        Collections.swap(list, i, i + 1)
                    }
                } else {
                    for (i in fromPosition downTo targetPosition + 1) {
                        Collections.swap(list, i, i - 1)
                    }
                }
                rlv.adapter!!.notifyItemMoved(fromPosition, targetPosition)
                return true
            }

            override fun isLongPressDragEnabled(): Boolean {
                return true
            }

            /**
             * 侧滑删除后回调的方法
             */
            override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {

                val position = viewHolder.adapterPosition
                list.removeAt(position)
                rlv.adapter!!.notifyItemRemoved(position)
            }


            /**
             * 拖动选择状态改变回调
             */
            override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
                if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
                    //拖动的时候设置背景为灰色
                    viewHolder?.itemView?.setBackgroundColor(Color.GRAY)
                }
            }

            /**
             * 回到正常状态的时候回调
             */
            override fun clearView(
                recyclerView: RecyclerView,
                viewHolder: RecyclerView.ViewHolder
            ) {
                viewHolder.itemView.setBackgroundColor(0)
            }

        })
        //绑定recyclerview
        itemTouchHelper.attachToRecyclerView(rlv)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值