美文网首页
Android侧滑删除库SwipeRecyclerView的封装

Android侧滑删除库SwipeRecyclerView的封装

作者: 奔跑的佩恩 | 来源:发表于2021-01-06 22:37 被阅读0次

    前言

    Android开发过程中,我们偶尔会用到RecyclerView列表的侧滑删除功能。今天基于侧滑删除库SwipeRecyclerView做一个简单的封装,使调用更加的简单快捷。下面就来讲讲侧滑删除帮助类——SwipeHelper的使用吧。
    今天涉及以下内容:

    1. 侧滑删除库SwipeRecyclerView官网
    2. 依赖及布局中引用SwipeRecyclerView
    3. 需要做的准备工作
    4. SwipeHelper在Activity中使用
    5. 需要注意的点
    6. 效果图和项目结构图
    7. SwipeHelper源码

    先来波效果图


    1.gif

    一. 侧滑删除库SwipeRecyclerView官网

    SwipeHelper的封装基于侧滑删除库SwipeRecyclerView,大家可以在官网上找到更多详细使用方法。本篇文章是基于此库做简单封装,以便在开发过程中加快进度。详细库相关用法这里就不做介绍了。

    二. 依赖及布局中引用SwipeRecyclerView

    首先,需要在你 app_module对应的build.gradle中添加侧滑删除库的引用:

    dependencies {
        //RecycleView侧滑删除
        implementation 'com.yanzhenjie.recyclerview:x:1.3.2'
    }
    

    然后在你的布局中引用侧滑删除列表控件SwipeRecyclerView,类似如下:

        <com.yanzhenjie.recyclerview.SwipeRecyclerView
            android:id="@+id/mRecyclerView"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginBottom="5dp"
            android:paddingStart="5dp"
            android:paddingRight="5dp"
            app:layout_constraintTop_toBottomOf="@+id/mBtnTest"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"/>
    

    三.需要做的准备工作

    侧滑删除时边上的菜单按钮会涉及到一个宽度问题,所以你需要在res/values/dimen.xml文件中(若dimen.xml文件不存在,则需要自己创建)添加以下属性:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <dimen name="dp_70">70dp</dimen>
        //其他属性省略
        //......
    </resources>
    

    四. SwipeHelper在Activity中使用

    列表展示的话,肯定少不了适配器了,下面贴出适配器MyAdapter源码:

    public class MyAdapter<T> extends RecyclerView.Adapter{
    
        public static final int DEFAULT_INDEX=-1;
    
        private Context mContext;
        private List<T>mData;
        private HolderView mHolderView;
        protected OnRecyclerItemClickListener mOnRecyclerItemClickListener;
    
        public MyAdapter(Context context,List<T>data){
            this.mContext=context;
            this.mData=data;
        }
    
        public void setOnRecyclerItemClickListener(OnRecyclerItemClickListener onRecyclerItemClickListener){
            this.mOnRecyclerItemClickListener=onRecyclerItemClickListener;
        }
    
        @Override
        public int getItemCount() {
            return mData!=null?mData.size():0;
        }
    
        @NonNull
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            LayoutInflater mInflater = LayoutInflater.from(mContext);
    
            View v = mInflater.inflate(R.layout.item_myadapter, parent, false);
            mHolderView = new HolderView(v);
            return mHolderView;
        }
    
        @Override
        public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
            String bean = mData.get(position).toString();
    
            mHolderView.mTvName.setText(StringUtil.isEmptyShow(bean));
    
            //点击事件
            mHolderView.mConstraintLayout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if(mOnRecyclerItemClickListener!=null){
                        mOnRecyclerItemClickListener.onRecyclerClick(view,position);
                    }
                }
            });
        }
    
        public void setRecyclerManager(RecyclerView recyclerView){
            LinearLayoutManager layoutManager = new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false);
            layoutManager.setSmoothScrollbarEnabled(true);
            layoutManager.setAutoMeasureEnabled(true);
            recyclerView.setNestedScrollingEnabled(false);
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(layoutManager);
            recyclerView.setAdapter(this);
        }
    
    
        public interface OnRecyclerItemClickListener {
            void onRecyclerClick(View view, int position);
        }
    }
    

    涉及到HolderView代码如下:

    public class HolderView extends RecyclerView.ViewHolder{
    
        public ConstraintLayout mConstraintLayout;
        public TextView mTvName;
        public TextView mTvAddress;
    
        public HolderView(View itemView) {
            super(itemView);
    
            mConstraintLayout=itemView.findViewById(R.id.cl);
            mTvName=itemView.findViewById(R.id.tv_name);
            mTvAddress=itemView.findViewById(R.id.tv_adress);
        }
    }
    

    然后适配器的布局item_myadapter.xml代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
    
        android:id="@+id/cl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        tools:context=".MainActivity">
    
    
        <TextView
            android:id="@+id/tv_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="30dp"
            android:text="TextView"
            android:textColor="#000000"
            android:textSize="16sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/tv_adress"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintHorizontal_chainStyle="spread_inside"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <TextView
            android:id="@+id/tv_adress"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="30dp"
            android:text="TextView"
            android:textColor="#000000"
            android:textSize="16sp"
            android:gravity="center_vertical|right"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/tv_name"
            app:layout_constraintTop_toTopOf="@+id/tv_name" />
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    最后看看SwipeHelperTempActivity中的使用:

    public class TempActivity extends AppCompatActivity{
    
        private TextView mTvTest;
        private Button mBtnTest;
        private SwipeRecyclerView mRecyclerView;
    
        private List<String>mTestList;
        private MyAdapter<String>myAdapter;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_temp);
    
            //初始化控件
            initView();
            //初始化数据
            initData();
            //控件监听
            setListener();
        }
    
        /**初始化控件**/
        private void initView(){
            mTvTest=findViewById(R.id.mTvTest);
            mBtnTest=findViewById(R.id.mBtnTest);
            mRecyclerView=findViewById(R.id.mRecyclerView);
        }
    
        private void initData(){
            SwipeHelper swipeHelper=new SwipeHelper();
            //侧滑删除的设置(必须在初始化列表前调用,否则会报错)
            swipeHelper.setBackgroundColor(R.color.colorPrimary) //设置侧滑菜单按钮背景色,默认为 R.color.red
                    .setImageId(0) //设置侧滑菜单按钮设置图片id,值为0时表示不设置
                    .setText("删除") //设置为null时表示不设置文字,默认为 “删除”
                    .setTextColor(Color.YELLOW) //设置为0时表示不设置文字颜色,默认为白色
                    .initSwipeRecyclerView(mRecyclerView, TempActivity.this, new SwipeHelper.OnSwipeListener() {
                        @Override
                        public void swipe(int position) {
                            String item = mTestList.get(position);
                            ToastUtil.shortShow("======删除===" + item);
                        }
                    });
    
            mTestList=new ArrayList<>();
            mTestList.add("我");
            mTestList.add("是");
            mTestList.add("中国");
            mTestList.add("人");
            myAdapter=new MyAdapter<>(TempActivity.this,mTestList);
            myAdapter.setRecyclerManager(mRecyclerView);
        }
    
        /**控件监听**/
        private void setListener() {
            mBtnTest.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                     test();
                }
            });
    
        }
    
        private void test(){
    
        }
    
    }
    

    五.需要注意的点

    需要注意的是, SwipeHelper关于侧滑删除的设置必须在初始化列表前调用,否则会报错。

    六.效果图和项目结构图

    效果图.gif
    项目结构图.png

    七. SwipeHelper源码

    下面给出SwipeHelper源码:

    相关文章

      网友评论

          本文标题:Android侧滑删除库SwipeRecyclerView的封装

          本文链接:https://www.haomeiwen.com/subject/jnoooktx.html