recyclerview实现拖拽功能可以借助原生提供的ItemTouchHelpter类来实现,基础拖拽和删除功能都封装的有,细节需要自己处理下。
先定义一个接口,定义一下方法,方便和adapter联动处理数据,相对ItemTouchHelpter.call 增加一个判断当前所选item是否能够拖拽的判断。
interface RecyclerItemDragTouchHelper { /** * 交换 * * @param source * @param target */ fun onItemMove(source: RecyclerView.ViewHolder?, target: RecyclerView.ViewHolder?) /** * 选中 * * @param source */ fun onItemSelect(source: RecyclerView.ViewHolder?, actionState: Int) /** * 状态清除 * * @param source */ fun onItemClear(source: RecyclerView.ViewHolder?) /** * item是否可以拖拽 * * @param source */ fun isCanMove(position: Int): Boolean }
需要目标adapter 继承RecyclerItemDragTouchHelper接口实现接口中方法
定义两个变量记录数据交换后要刷新的位置,避免出现混乱问题。
var startPosition = -1 var endPosition = -1
override fun onItemMove(source: RecyclerView.ViewHolder?, target: RecyclerView.V