📅  最后修改于: 2023-12-03 15:13:21.544000             🧑  作者: Mango
RecyclerView 是 Android 中一个非常强大的组件,它可以简单快速地创建大量数据列表。滑动删除是一种常见的操作方式,用户可以通过滑动列表项快速删除某一条数据。
在本文中,我们将介绍如何在 Android 中创建一个带有滑动删除功能的 RecyclerView 项目。
在布局文件中添加 RecyclerView,定义它的布局参数和适配器。
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
我们需要先准备好需要展示的数据,这是滑动删除操作的基础。
List<String> mData = new ArrayList<>();
mData.add("北京");
mData.add("上海");
mData.add("广州");
mData.add("深圳");
创建适配器,指定 ViewHolder 用于表示列表项和刷新数据。
private class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tvContent.setText(mData.get(position));
}
@Override
public int getItemCount() {
return mData.size();
}
}
private class MyViewHolder extends RecyclerView.ViewHolder {
TextView tvContent;
public MyViewHolder(View itemView) {
super(itemView);
tvContent = (TextView) itemView.findViewById(R.id.tv_content);
}
}
使用 ItemTouchHelper 来实现滑动删除操作,需要实现 ItemTouchHelper.Callback 接口。
private class MyItemTouchHelper extends ItemTouchHelper.Callback {
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
return makeMovementFlags(dragFlags, swipeFlags);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
mData.remove(position);
mAdapter.notifyItemRemoved(position);
}
}
mItemTouchHelper = new ItemTouchHelper(new MyItemTouchHelper());
mItemTouchHelper.attachToRecyclerView(mRecyclerView);
添加滑动删除的背景,可以让用户更直观地识别出需要删除的项。
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
card_view:cardBackgroundColor="@color/white"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="4dp">
<RelativeLayout
android:id="@+id/layout_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="16sp"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/layout_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorAccent"
android:visibility="gone">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="16dp"
android:text="删除"
android:textColor="@color/white"
android:textSize="16sp"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
最后,在 MyViewHolder 中添加一个触摸监听器,用于监听用户手指滑动的动作。
我们先设置列表项的背景为默认背景,当用户开始滑动该项时,将背景切换为滑动删除的背景。
mViewHolder.itemView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mViewHolder.itemView.setBackgroundResource(R.drawable.shape_white);
mItemTouchHelper.startSwipe(mViewHolder);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
mViewHolder.itemView.setBackgroundResource(R.drawable.selector_card_item_bg);
break;
}
return false;
}
});
结果:
本文介绍了如何在 Android 中创建一个带有滑动删除功能的 RecyclerView 项目。通过本文的学习,你可以掌握 RecyclerView 的基本用法和滑动删除的实现方式。如果你有任何疑问或建议,欢迎在评论区发表。