Android开发中怎么在RecyclerView上添加一个滑动删除功能吗?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
首先更新项目的布局(item_main.xml):
& lt; FrameLayout xmlns: Android=癶ttp://schemas.android.com/apk/res/android" ,android: id=癅 + id/item" ,android: layout_width=癿atch_parent" ,android: layout_height=? listPreferredItemHeight" ,android:点击=皌rue" ,android: focusable=皌rue" 前景,android:=? selectableItemBackground"比; & lt; TextView ,android: id=癅 + id/text" ,android: layout_width=皐rap_content" ,android: layout_height=皐rap_content" ,android: layout_gravity=癱enter_vertical" ,android: layout_marginLeft=?6 dp" ,android: textAppearance=? android: attr/textAppearanceMedium",/比; & lt; ImageView ,android: id=癅 + id/handle" ,android: layout_width=? listPreferredItemHeight" ,android: layout_height=癿atch_parent" ,android: layout_gravity=癱enter_vertical | right" ,android: scaleType=癱enter" https://www.yisu.com/zixun/, android: src=" @drawable/ic_reorder_grey_500_24dp "/>
用作“拖放手柄“的图片可以在材料设计图标找的到,也可以方便地通过Android材料设计图标生成器插件添加。
我们曾经提到过,可以通过代码<代码> ItemTouchHelper.startDrag (RecyclerView.ViewHolder) 代码>来开启拖动。所以我们要做的就是更新ViewHolder来包含新的手柄视图,并设置一个简单的触摸事件接口,以触发startDrag()方法。
我们需要定义一个接口来传递拖动事件。
public interface OnStartDragListener {/* * ,* nbsp; when  a view is requesting a start of a 阻力。 ,* ,* @param viewHolder 从而holder of 从而view 用阻力。 ,*/,void onStartDrag (RecyclerView.ViewHolder viewHolder); }
然后,在ItemViewHolder中实现化手柄视图。
public final ImageView handleView; public ItemViewHolder (View itemView), { ,超级(itemView); ,//?=,handleView (ImageView), itemView.findViewById (R.id.handle); }
并且更新适配器。
private final OnStartDragListener mDragStartListener; public RecyclerListAdapter (OnStartDragListener dragStartListener), {=,,mDragStartListener  dragStartListener; ,//? } @Override public void  onBindViewHolder (final ItemViewHolder ,, ,int 位置),{ ,//? ,holder.handleView.setOnTouchListener (new OnTouchListener (), { ,@Override ,public boolean  ondraw (View v, MotionEvent 事件),{ ,if (MotionEventCompat.getActionMasked(事件),==, MotionEvent.ACTION_DOWN才能),{ ,mDragStartListener.onStartDrag(持有人); ,} ,return 假; ,} ,}); }
完整的适配器应该看起来像这个。
剩下的是把OnStartDragListener添加到片段。
public class RecyclerListFragment extends Fragment implements ,OnStartDragListener { ,//? ,@Override ,public void  onViewCreated (View 看来,,Bundle 冰柱),{ ,super.onViewCreated(视图,冰柱); ,RecyclerListAdapter a =, new RecyclerListAdapter(这个); ,//? ,} ,@Override ,public void  onStartDrag (RecyclerView.ViewHolder viewHolder), { ,mItemTouchHelper.startDrag (viewHolder); ,} }
但你运行之后,可以看到这样的效果:
<强>标示选中视图强>
在上一篇的基础示例中,被拖拽的项事实上是被选中的,但是没有可视化的标示。由于显著的理由,这是不受欢迎的,但也很容易修复。事实上,在ItemTouchHelper的帮助下,只要你的ViewHolder的itemView设置了背景集合(选择),就会得到相应的效果。在棒棒糖及之后的版本、项目视图的海拔在拖拽和滑动期间会增加。而在之前的版本中,滑动时会有褪色效果。看起来就像: