android开发 交换方向,Android使用RecycleView实现拖拽交换item位置

本文实例为大家分享了RecycleView实现拖拽交换item位置的具体代码,供大家参考,具体内容如下

老规矩,先来一张效果图:

相比起ListView而言,RecycleView实现拖拽交换位置的效果要简单很多,因为通过SDK中的ItemTouchHelper工具类可以轻松的实现这种效果,并且一套代码支持所有布局方式;而ListView的话则需要通过生成View的缓存镜像设置到ImageView中,然后通过WindowManager来操作该ImageView,具体怎么实现这里就不展开讲解了.回归到ItemTouchHelper话题上,这个工具类我们需要关心的方法只有一个,即:

public void attachToRecyclerView(@Nullable RecyclerView recyclerView) {}

通过名字也可以知道其作用就是和RecyclerView 建立关系.

而我们真正需要关心的地方就是ItemTouchHelper的内部类ItemTouchHelper.Callback,它是一个抽象类,需要我们去实现下面这几个关键的抽象方法以及重写几个非抽象的方法:

//决定拖拽/滑动的方向

public abstract int getMovementFlags(RecyclerView recyclerView,

ViewHolder viewHolder);

//和位置交换有关,可用于实现drag功能

public abstract boolean onMove(RecyclerView recyclerView,

ViewHolder viewHolder, ViewHolder target);

//和滑动有关,可用于实现swipe功能

public abstract void onSwiped(ViewHolder viewHolder, int direction);

//是否长按启用拖拽功能,默认是true

public boolean isLongPressDragEnabled() {return true;}

//是否支持滑动,默认true

public boolean isItemViewSwipeEnabled() {return true;}

//和目标View的状态改变有关,例如drag,swipe,ide

public void onSelectedChanged(ViewHolder viewHolder, int actionState) {}

//和移除View的状态有关,通常用于清除在onSelectedChanged,onChildDraw中对View设置的动画

public void clearView(RecyclerView recyclerView, ViewHolder viewHolder) {}

当创建完ItemTouchHelper.Callback的实现类,我这里称之为SimpleItemTouchHelperCallback后,还需要将数据的变化以及View的状态通知到RecycleView的Adapter中,为了达到解耦的目的,通常可以通过定义接口来实现,在SimpleItemTouchHelperCallback的构造方法中传入该解耦接口的引用,并让RecycleView的Adapter实现该解耦的接口,这样就实现了这2个类的通信问题了.

来看看我定义的解耦接口:

/**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值