Android开发中怎么在RecyclerView上添加一个滑动删除功能

  

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);
  ,}
  }

但你运行之后,可以看到这样的效果:

 Android开发中怎么在RecyclerView上添加一个滑动删除功能

<强>标示选中视图

在上一篇的基础示例中,被拖拽的项事实上是被选中的,但是没有可视化的标示。由于显著的理由,这是不受欢迎的,但也很容易修复。事实上,在ItemTouchHelper的帮助下,只要你的ViewHolder的itemView设置了背景集合(选择),就会得到相应的效果。在棒棒糖及之后的版本、项目视图的海拔在拖拽和滑动期间会增加。而在之前的版本中,滑动时会有褪色效果。看起来就像:

 Android开发中怎么在RecyclerView上添加一个滑动删除功能

Android开发中怎么在RecyclerView上添加一个滑动删除功能