RecylerView实现长按拖拉更改item位置

效果图:


实现步骤:

1.新建一个类继承  ItemTouchHelper.Callback:

class ItemDrag extends ItemTouchHelper.Callback{
        //设置可移动的标志,我用的GridLayout,所有可移动标志为up,down,left,right.  如果是LinerLayout,就是up,down.
        @Override
        public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
            int dragFlags = ItemTouchHelper.UP|ItemTouchHelper.DOWN
                    |ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT;
            int swipeFlags = 0;
            return makeMovementFlags(dragFlags,swipeFlags);
        }
        //移动时会触发这个方法
        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            int fromPosition = viewHolder.getAdapterPosition();  //取得第一个item的position
            int toPosition = target.getAdapterPosition();    //取得目标item的position
            Collections.swap(mChoosed,fromPosition,toPosition);  //mChoosed是Recylerview的data集合,将两个item交换
            mChoosedTagAdapter.notifyItemMoved(fromPosition,toPosition);  //recylerview的adapter通知交换更新
            return true;
        }

        @Override
        public boolean isLongPressDragEnabled() {   //设置是否开启长按可拖拉
            mShowIcon = true;   
            mTagAdapter.notifyDataSetChanged();
            mChoosedTagAdapter.notifyDataSetChanged();
            mButton.setText("完成");
            return true;
        }

        @Override //移动完成后的回调
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {

        }

        @Override  //设置移动时背景色
        public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
            if(actionState != ItemTouchHelper.ACTION_STATE_IDLE){
                viewHolder.itemView.setBackgroundColor(Color.LTGRAY);
            }
            super.onSelectedChanged(viewHolder, actionState);
        }

        @Override//移动完成后恢复背景色
        public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
            super.clearView(recyclerView, viewHolder);
            viewHolder.itemView.setBackgroundColor(0);
        }
    }

2.创建ItemTouchHelper类的实例,参数为你自己写的那个继承callback的类,并为recylerview设置这个ItemTouchHelper.


然后就ok啦。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值