Android侧滑删除库SwipeRecyclerView的封装
2021-01-06 本文已影响0人
奔跑的佩恩
前言
在Android
开发过程中,我们偶尔会用到RecyclerView
列表的侧滑删除功能。今天基于侧滑删除库SwipeRecyclerView
做一个简单的封装,使调用更加的简单快捷。下面就来讲讲侧滑删除帮助类——SwipeHelper
的使用吧。
今天涉及以下内容:
- 侧滑删除库SwipeRecyclerView官网
- 依赖及布局中引用SwipeRecyclerView
- 需要做的准备工作
- SwipeHelper在Activity中使用
- 需要注意的点
- 效果图和项目结构图
- 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>
最后看看SwipeHelper
在TempActivity
中的使用:
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
源码: