在 Android 开发中,RecyclerView 是常用的列表控件。而 Material Design 是 Google 推出的设计语言,它的设计风格简洁大方,深受开发者喜爱。在 Material Design 中,侧滑删除是一种常见的交互模式。本文将介绍如何在 Material Design 下实现 RecyclerView 的侧滑删除功能。
侧滑删除的实现原理
侧滑删除的实现原理是通过在 RecyclerView 中添加一个 ItemTouchHelper.Callback 回调类,然后在该类中处理各种手势事件,实现侧滑删除的效果。
ItemTouchHelper.Callback 回调类中主要包含以下几个方法:
- onMove():当用户拖动一个 ItemView 时被调用,可以用来实现拖动排序等功能。
- onSwiped():当用户滑动一个 ItemView 时被调用,可以用来实现侧滑删除等功能。
- getMovementFlags():用来设置支持的拖动和滑动的方向。
- isLongPressDragEnabled():是否支持长按拖动。
- isItemViewSwipeEnabled():是否支持滑动删除。
在本文中,我们只需要实现 onSwiped() 方法即可。
实现步骤
1. 添加依赖
在 build.gradle 文件中添加以下依赖:
implementation 'androidx.recyclerview:recyclerview:1.1.0'
2. 创建 RecyclerView
在布局文件中添加 RecyclerView 控件:
<androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" />
3. 创建适配器
创建 RecyclerView 的适配器,继承自 RecyclerView.Adapter<vh>,其中 VH 是 ViewHolder 的泛型。在 onCreateViewHolder() 方法中创建 ViewHolder,并将其与布局文件绑定:
-- -------------------- ---- ------- ------ ----- --------- ------- ------------------------------------------ - ----- ---------- ------- ----------------------- - -------- --------- --------------- --------- - ---------------- -------- - ------------------------------------- - - -------- --------- ------ ---------- --------------------------- --------- ------- --- --------- - ---- ---- - ---------------------------------------------------------------------- ------- ------- ------ --- ----------------- - --------- ------ ---- ------------------------- ---------- ------- --- --------- - ----------------------------- - - ---------- - --------- ------ --- -------------- - ------ --- - -
4. 创建 ItemTouchHelper.Callback 回调类
创建一个 ItemTouchHelper.Callback 类,继承自 ItemTouchHelper.Callback,实现 onSwiped() 方法:
-- -------------------- ---- ------- ------ ----- ------------------------- ------- ------------------------ - ------- --------- --------- ------ ----------------------------------- -------- - -------- - -------- - --------- ------ --- ------------------------- ------------ ------------- -------- ----------------------- ----------- - --- ---------- - --------------------- - -------------------- ------ -------------------- ------------ - --------- ------ ------- ------------------------ - ------ ----- - --------- ------ ---- ----------------- ----------------------- ----------- --- ---------- - --- -------- - -------------------------------- ------------------------------ - -
其中,getMovementFlags() 方法用来设置支持的滑动方向,这里设置为左右滑动。isItemViewSwipeEnabled() 方法用来开启滑动删除功能。onSwiped() 方法中,我们获取被滑动的 ItemView 的位置,然后通过适配器的 removeItem() 方法将其删除。
5. 绑定 ItemTouchHelper
在 Activity 或 Fragment 中,创建 RecyclerView 和适配器,并将其绑定。然后创建一个 ItemTouchHelper 实例,并将其与 RecyclerView 绑定:
RecyclerView recyclerView = findViewById(R.id.recyclerView); MyAdapter adapter = new MyAdapter(); recyclerView.setAdapter(adapter); MyItemTouchHelperCallback callback = new MyItemTouchHelperCallback(adapter); ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback); itemTouchHelper.attachToRecyclerView(recyclerView);
至此,我们已经完成了 RecyclerView 的侧滑删除功能的实现。
示例代码
完整的示例代码如下:
activity_main.xml
<androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" />
item_layout.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:textSize="18sp" android:textStyle="bold" />
MyAdapter.java
-- -------------------- ---- ------- ------ ----- --------- ------- ------------------------------------------ - ----- ---------- ------- ----------------------- - -------- --------- --------------- --------- - ---------------- -------- - ------------------------------------- - - -------- --------- ------ ---------- --------------------------- --------- ------- --- --------- - ---- ---- - ---------------------------------------------------------------------- ------- ------- ------ --- ----------------- - --------- ------ ---- ------------------------- ---------- ------- --- --------- - ----------------------------- - - ---------- - --------- ------ --- -------------- - ------ --- - ------ ---- -------------- --------- - ---------------------------- - -
MyItemTouchHelperCallback.java
-- -------------------- ---- ------- ------ ----- ------------------------- ------- ------------------------ - ------- --------- --------- ------ ----------------------------------- -------- - -------- - -------- - --------- ------ --- ------------------------- ------------ ------------- -------- ----------------------- ----------- - --- ---------- - --------------------- - -------------------- ------ -------------------- ------------ - --------- ------ ------- ------------------------ - ------ ----- - --------- ------ ---- ----------------- ----------------------- ----------- --- ---------- - --- -------- - -------------------------------- ------------------------------ - -
MainActivity.java
-- -------------------- ---- ------- ------ ----- ------------ ------- ----------------- - --------- --------- ---- --------------- ------------------- - ----------------------------------- --------------------------------------- ------------ ------------ - -------------------------------- --------- ------- - --- ------------ --------------------------------- ------------------------- -------- - --- ----------------------------------- --------------- --------------- - --- -------------------------- --------------------------------------------------- - -
总结
本文介绍了在 Material Design 下实现 RecyclerView 的侧滑删除功能的方法,通过添加 ItemTouchHelper.Callback 回调类,并实现其中的 onSwiped() 方法,即可实现侧滑删除。同时,本文也提供了完整的示例代码,希望能够对大家有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/655e3e6fd2f5e1655d883400