val itemTouchHelper =ItemTouchHelper(object :ItemTouchHelper.Callback(){/**
* 获取滑动响应的方向 包含两个 1.拖动dragFlags 2.侧滑删除swipeFlags
* 代表只能向左侧侧滑删除 当前可以是这样ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT
*/
override fun getMovementFlags(
recyclerView:RecyclerView,
viewHolder:RecyclerView.ViewHolder):Int{//表示只能向左侧滑删除
val swipeFlags =ItemTouchHelper.LEFT
//拖动var dragFlags =0if(rlv.layoutManager is GridLayoutManager){//如果是GridView样式,四个方向都支持拖动
dragFlags =ItemTouchHelper.UP or ItemTouchHelper.LEFT or
ItemTouchHelper.DOWN or ItemTouchHelper.RIGHT
}else{//如果是listView样式,只支持上下,不支持左右
dragFlags =ItemTouchHelper.UP or ItemTouchHelper.DOWN
}returnmakeMovementFlags(dragFlags, swipeFlags)}/**
* 拖动的时候不断回调此方法
*/
override fun onMove(
recyclerView:RecyclerView,
viewHolder:RecyclerView.ViewHolder,
target:RecyclerView.ViewHolder):Boolean{//获取原来的位置
val fromPosition = viewHolder.adapterPosition
//获取目标的值
val targetPosition = target.adapterPosition
if(fromPosition < targetPosition){for(i in fromPosition until targetPosition){Collections.swap(list, i, i +1)}}else{for(i in fromPosition downTo targetPosition +1){Collections.swap(list, i, i -1)}}
rlv.adapter!!.notifyItemMoved(fromPosition, targetPosition)returntrue}
override fun isLongPressDragEnabled():Boolean{returntrue}/**
* 侧滑删除后回调的方法
*/
override fun onSwiped(viewHolder:RecyclerView.ViewHolder, direction:Int){
val position = viewHolder.adapterPosition
list.removeAt(position)
rlv.adapter!!.notifyItemRemoved(position)}/**
* 拖动选择状态改变回调
*/
override fun onSelectedChanged(viewHolder:RecyclerView.ViewHolder?, actionState:Int){if(actionState !=ItemTouchHelper.ACTION_STATE_IDLE){//拖动的时候设置背景为灰色
viewHolder?.itemView?.setBackgroundColor(Color.GRAY)}}/**
* 回到正常状态的时候回调
*/
override fun clearView(
recyclerView:RecyclerView,
viewHolder:RecyclerView.ViewHolder){
viewHolder.itemView.setBackgroundColor(0)}})//绑定recyclerview
itemTouchHelper.attachToRecyclerView(rlv)