Recyclerview适配器2.0(七)——滑动和拖拽

第七篇为滑动和拖拽,滑动删除分两种实现方式

第一种

package com.example.recyclerview.recycler.slide;

import android.annotation.SuppressLint;
import android.graphics.Canvas;
import android.view.MotionEvent;
import android.view.View;

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

import com.example.recyclerview.recycler.BaseQuickAdapter;
import com.example.recyclerview.recycler.BaseViewHolder;

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

public abstract class BaseSlideAdapter<T, VH extends BaseViewHolder> extends BaseQuickAdapter<T, VH> {

    //会报The key must be an application-specific resource id.修改成唯一
    public static final int TAG = 0x10000000;
    private static final int NO_TOGGLE_VIEW = 0;
    private int mToggleViewId = NO_TOGGLE_VIEW;
    private ItemTouchHelper mItemTouchHelper;
    private boolean itemDragEnabled = false;
    private boolean itemSwipeEnabled = false;
    private OnItemDragListener mOnItemDragListener;
    private OnItemSwipeListener mOnItemSwipeListener;
    private boolean mDragOnLongPress = true;

    private View.OnTouchListener mOnToggleViewTouchListener;
    private View.OnLongClickListener mOnToggleViewLongClickListener;

    public BaseSlideAdapter(int layoutResId, List<T> data) {
        super(layoutResId, data);
    }

    @Override
    public void onBindViewHolder(@NonNull VH holder, int position) {
        super.onBindViewHolder(holder, position);
        if (mItemTouchHelper != null && itemDragEnabled) {
            if (mToggleViewId != NO_TOGGLE_VIEW) {
                View toggleView = holder.getView(mToggleViewId);
                if (toggleView != null) {
                    toggleView.setTag(TAG, holder);
                    if (mDragOnLongPress) {
                        toggleView.setOnLongClickListener(mOnToggleViewLongClickListener);
                    } else {
                        toggleView.setOnTouchListener(mOnToggleViewTouchListener);
                    }
                }
            } else {
                holder.itemView.setTag(TAG, holder);
                holder.itemView.setOnLongClickListener(mOnToggleViewLongClickListener);
            }
        }
    }

    public int getViewHolderPosition(RecyclerView.ViewHolder viewHolder) {
        return viewHolder.getAdapterPosition();
    }

    /*******************************************************拖动*****************************************************************/

    /**
     * 开启拖动item功能
     * 长按时使用itemView作为toggleView。
     *
     * @param itemTouchHelper {@link ItemTouchHelper}
     */
    public void enableDragItem(@NonNull ItemTouchHelper itemTouchHelper) {
        enableDragItem(itemTouchHelper, NO_TOGGLE_VIEW, true);
    }

    /**
     * 禁用拖动item功能
     */
    public void disableDragItem() {
        itemDragEnabled = false;
        mItemTouchHelper = null;
    }

    /**
     * 开启拖动item的子view的功能
     * 长按时使用传入的 toggleViewId 作为toggleView。
     *
     * @param itemTouchHelper {@link ItemTouchHelper}
     * @param toggleViewId    被拖动的itemView的子view的id
     * @param dragOnLongPress 如果为true,则拖动事件将在长按时触发,否则将在点击时触发。
     */
    public void enableDragItem(@NonNull ItemTouchHelper itemTouchHelper, int toggleViewId, boolean dragOnLongPress) {
        itemDragEnabled = true;
        mItemTouchHelper = itemTouchHelper;
        setToggleViewId(toggleViewId);
        setToggleDragOnLongPress(dragOnLongPress);
    }

    /**
     * 设置长按子View:mToggleViewId触发拖动事件
     * 如果未设置mToggleViewId,则在长按item时触发拖动事件
     */
    public void setToggleViewId(int toggleViewId) {
        mToggleViewId = toggleViewId;
    }

    public boolean isItemDraggable() {
        return itemDragEnabled;
    }

    /**
     * 如果为true,则拖动事件将在长按时触发,否则将在点击时触发。
     *
     * @param longPress 默认为true
     */
    public void setToggleDragOnLongPress(boolean longPress) {
        mDragOnLongPress = longPress;
        if (mDragOnLongPress) {
  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RecyclerView适配器是用于将数据绑定到RecyclerView视图的一种方式。适配器负责创建视图项并将数据绑定到这些视图项上,以便在RecyclerView中显示它们。 以下是一个简单的RecyclerView适配器示例: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { String item = mData.get(position); holder.mTextView.setText(item); } @Override public int getItemCount() { return mData.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public ViewHolder(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(R.id.text_view); } } } ``` 在此示例中,我们创建了一个名为MyAdapter的适配器类,它接受一个String类型的列表作为数据源。在onCreateViewHolder()方法中,我们从布局文件中创建了一个视图项,并将其包装在ViewHolder对象中返回。在onBindViewHolder()方法中,我们将数据绑定到ViewHolder中的视图项上。最后,在getItemCount()方法中,我们返回数据源中的项数。 RecyclerView适配器是一项非常强大的技术,它可以帮助您更轻松地管理和显示大量数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值