android ItemTouchHelper,adapter item拖拽滑动,分页标题顺序编辑

1、CustomItemTouchCallback自定义、继承ItemTouchHelper.Callback:

package com.zc.shortvideo.helper.utils;


import android.graphics.Canvas;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;

/**
 * author  : jian11058
 * time    : 2022/3/22
 * desc    :
 */
public class CustomItemTouchCallback extends ItemTouchHelper.Callback {

    private final ItemTouchAdapter itemTouchAdapter;

    public CustomItemTouchCallback(ItemTouchAdapter itemTouchAdapter) {
        this.itemTouchAdapter = itemTouchAdapter;
    }

    @Override
    public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
        if (recyclerView.getLayoutManager() instanceof GridLayoutManager) {
            final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
            final int swipeFlags = 0;
            return makeMovementFlags(dragFlags, swipeFlags);
        } else {
            final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
            //final int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
            final int swipeFlags = 0;
            return makeMovementFlags(dragFlags, swipeFlags);
        }
    }

    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder1) {

        int fromPosition = viewHolder.getAdapterPosition();//得到拖动ViewHolder的position
        int toPosition = viewHolder1.getAdapterPosition();//得到目标ViewHolder的position
        itemTouchAdapter.onMove(fromPosition, toPosition);
        return true;
    }

    @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
        // 从数据源中移除相应的数据
        itemTouchAdapter.onSwiped(viewHolder.getAdapterPosition());
    }

    @Override
    public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
        super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
    }

    public interface ItemTouchAdapter {
        void onMove(int fromPosition, int toPosition);

        void onSwiped(int position);
    }
}

2、basequickAdapter的接口实现

package com.zc.shortvideo.helper.adapter;

import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.zc.shortvideo.helper.R;
import com.zc.shortvideo.helper.model.EditModel;
import com.zc.shortvideo.helper.utils.CustomItemTouchCallback;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * author  : jian11058
 * time    : 2022/3/22
 * desc    :
 */
public class TextAdapter extends BaseQuickAdapter<EditModel, BaseViewHolder> implements CustomItemTouchCallback.ItemTouchAdapter {

    private boolean isEdit;
    private boolean isShowSelect;//是否显示选中,

    public TextAdapter(@Nullable List<EditModel> data,boolean isShowSelect) {
        super(R.layout.item_text, data);
        this.isShowSelect=isShowSelect;
    }

    @Override
    protected void convert(@NonNull BaseViewHolder helper, EditModel item) {
        TextView tv = helper.getView(R.id.item_text_tv);
        RelativeLayout layout = helper.getView(R.id.item_text_layout);

        ImageView img_delete = helper.getView(R.id.item_text_img_remove);
        if (!TextUtils.isEmpty(item.title)) {
            tv.setText(item.title);
        }

        if (isShowSelect){
            tv.setSelected(item.isVip);
        }

        if (isEdit) {
            img_delete.setVisibility(View.VISIBLE);
        } else {
            img_delete.setVisibility(View.GONE);
        }
    }

    @Override
    public void onMove(int fromPosition, int toPosition) {
//        if (fromPosition == 0 || toPosition == 0) {
//            return;
//        }
//        if (fromPosition == 1 || toPosition == 1) {
//            return;
//        }
        if (fromPosition < toPosition) {
            for (int i = fromPosition; i < toPosition; i++) {
                Collections.swap(getData(), i, i + 1);
            }
        } else {
            for (int i = fromPosition; i > toPosition; i--) {
                Collections.swap(getData(), i, i - 1);
            }
        }
        notifyItemMoved(fromPosition, toPosition);
    }

    @Override
    public void onSwiped(int position) {
        getData().remove(position);
        notifyItemRemoved(position);
    }

    /**
     * 显示删除按钮
     *
     * @param isShow
     */
    public void showEditMode(boolean isShow) {
        isEdit = isShow;
        notifyDataSetChanged();
    }

    public void setSelectPosition(int position){
        for (int i = 0; i < getData().size(); i++) {
            EditModel editModel = getData().get(i);
            if (position!=i){
                if (editModel.isVip){
                    editModel.isVip=false;
                    notifyItemChanged(i);
                }
            }else {
                editModel.isVip=true;
                notifyItemChanged(i);
            }
        }
    }

    public List<String> getTitles(){
        List<String> list=new ArrayList<>();
        if (getData().size()==0){
            return list;
        }
        for (EditModel datum : getData()) {
            list.add(datum.title);
        }
        return list;
    }
}

3、使用

  recyclerView_mine.setLayoutManager(new GridLayoutManager(mContext,4));
        recyclerView_mine.setAdapter(adapter_mine);
        adapter_mine.setSelectPosition(position);

        ItemTouchHelper itemTouchHelper=new ItemTouchHelper(new CustomItemTouchCallback(adapter_mine));
        itemTouchHelper.attachToRecyclerView(recyclerView_mine);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jian11058

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值