RecyclerView 拖动排序 左右滑动删除

RecyclerView实现item拖动和滑动

创建ItemTouchHelper对象,重写内部方法。且绑定到RecyclerView.

   itemTouchHelper.attachToRecyclerView(mRecycler);

方法说明:

  • getMovementFlags 设置哪些方向可以拖动和滑动

  • onMove 拖动item的回调方法,在这里面实现拖动需要做的事情,比如RecyclerView里面item的顺序交换,传入的参数是被拖动item的ViewHolder和目标ViewHolder

  • onSwiped 滑动item的回调方法,在这里面实现滑动需要做的事情,比如RecyclerView里面item的顺序交换

  • onSelectedChanged 在每次item的状态变成拖拽 (ACTION_STATE_DRAG) 或者 滑动 (ACTION_STATE_SWIPE)的时候被调用。这是把你的item view变成激活状态。

  • clearView item被放开或者动画完成的回调

  • isLongPressDragEnabled() 设置是否长按才进入拖动

  • isItemViewSwipeEnabled() 设置是否支持滑动操作



ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback(){
        //同来设置 拖拽移动,或移动删除
        @Override
        public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
            int swiped = ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT;
            int   dragFlags= ItemTouchHelper.UP | ItemTouchHelper.DOWN;

            //第一个参数拖动,第二个删除侧滑
            return makeMovementFlags(dragFlags, swiped);
        }
        //在拖动中不断的回调这个方法
        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            int oldPosition = viewHolder.getAdapterPosition();
            int newPosition = target.getAdapterPosition();
           
                    // 改变实际的数据集
            Collections.swap(list,oldPosition ,newPosition );
            
            adapter.notifyItemMoved(oldPosition, newPosition);
            return false;
        }
        //处理侧滑
        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            int position = viewHolder.getAdapterPosition();
            list.remove(position);
            adapter.notifyItemRemoved(position);
        }

        @Override
        public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
            if (actionState!=ItemTouchHelper.ACTION_STATE_IDLE){
                viewHolder.itemView.setBackgroundColor(Color.parseColor("#303F9F"));
            }
        }
        @Override
        public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
            super.clearView(recyclerView, viewHolder);
            viewHolder.itemView.setBackgroundColor(Color.TRANSPARENT);
        }
    });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值