📌  相关文章
📜  Android 创建滑动删除RecyclerView的项目(1)

📅  最后修改于: 2023-12-03 15:13:21.544000             🧑  作者: Mango

Android 创建滑动删除RecyclerView

简介

RecyclerView 是 Android 中一个非常强大的组件,它可以简单快速地创建大量数据列表。滑动删除是一种常见的操作方式,用户可以通过滑动列表项快速删除某一条数据。

在本文中,我们将介绍如何在 Android 中创建一个带有滑动删除功能的 RecyclerView 项目。

实现步骤
步骤一:创建 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 来实现滑动删除操作,需要实现 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;
    }
});

结果:

result

总结

本文介绍了如何在 Android 中创建一个带有滑动删除功能的 RecyclerView 项目。通过本文的学习,你可以掌握 RecyclerView 的基本用法和滑动删除的实现方式。如果你有任何疑问或建议,欢迎在评论区发表。