栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android列表拖动ListView~RecyclerView

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android列表拖动ListView~RecyclerView

最近有需求要做列表的拖动以及删除和增加业务,经过一番考量给出了效果。

 长按频道管理中的条目可以上下滑动,增加或者删除对应的频道。android列表拖动有一个强大的类就可以轻松实现了,就是ItemTouchHelper,可以很好的处理滑动删除逻辑,接下来看一下具体的业务代码。

使用 ItemTouchHelper 和 ItemTouchHelper.Callback

对于Item的手势操作分为两种:侧滑和拖动,如果需要支持这两种,那么需要给ItemTouchHelper传入一个ItemTouchHelper.Callback的子类,并把ItemTouchHelper和RecyclerView关联起来,下面,我们先来介绍一下ItemTouchHelper.Callback个回调方法的含义:

控制相关
  • public boolean isLongPressDragEnabled()
    是否可以通过长按来触发拖动操作,默认返回true,如果返回false,那么可以通过startDrag(ViewHolder)方法来触发某个特定Item的拖动的机制。
  • public boolean isItemViewSwipeEnabled()
    是否可以对每个Item进行侧滑。
  • public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder)
    返回对于某个ViewHolder可以移动的方向,可选的值有UP/DOWN/LEFT/RIGHT/START/END。对于纵向排列的线性布局而言,如果要支持上下拖动排序,那么就要标志位中就要包含UP&DOWN,而如果需要支持左滑删除,那么标志位中就要包含LEFT。
结果相关
  • public abstract boolean onMove(RecyclerView recyclerView, ViewHolder viewHolder, ViewHolder target)
    当某个被拖动的Item被从旧位置拖动到了新位置后回调,如果返回true,那么ItemTouchHelper就认为viewHolder已经被移动到了target在Adapter中的位置。
  • public abstract void onSwiped(ViewHolder viewHolder, int direction)
    当某个Item被滑动到消失时回调,direction表示滑动的方向。
状态相关
  • public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState)
    当Item的状态发生改变时,回调该方法,actionState的取值有ACTION_STATE_IDLE/ACTION_STATE_SWIPE/ACTION_STATE_DRAG。
  • public void clearView(RecyclerView recyclerView, ViewHolder viewHolder)
    标志着用户对于某个Item的操作并且Item的动画结束,此时我们应该恢复它的状态,以保证它被重新使用的时候能正确地展现。
  • public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive)

    • Canvas:绘制RecyclerView的Canvas
    • dx, dy:偏移。
    • actionState:拖拽还是侧滑,对应ACTION_STATE_DRAG和ACTION_STATE_SWIPE。
    • isCurrentlyActive为true表示这个Item正在被用户所控制,false则表示它仅仅是在回到原本状态的动画过程当中。
  • public void onChildDrawOver(Canvas c, RecyclerView recyclerView, ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive)
    和上面类似,只不过它是绘制在Item之上。

最后附上项目的代码,希望对有需要的同学帮助 
代码下载https://download.csdn.net/download/lou_liang/70114507

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/677947.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号