定义Adapter接口
interface ItemTouchHelperAdapter {
fun onItemMove(fromPosition: Int, toPosition: Int): Boolean
fun onItemDismiss(position: Int)
}
处理移动删除动作实现回调
定义Viewhodlder接口
interface ItemTouchHelperViewHolder {
fun onItemSelected()
fun onItemClear()
}
实现ItemTouchHelper动作回调
class SimpleItemTouchHelperCallback(private val adapter: ItemTouchHelperAdapter) :
ItemTouchHelper.Callback() {
override fun isLongPressDragEnabled() = true
override fun isItemViewSwipeEnabled() = false
override fun getMovementFlags(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
): Int {
val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN or
ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
val swipeFlags = ItemTouchHelper.START or ItemTouchHelper.END
return makeMovementFlags(dragFlags, swipeFlags)
}
override fun onMove(
recyclerView: RecyclerView,
source: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder,
): Boolean {
if (source.itemViewType != target.itemViewType) {
return false
}
adapter.onItemMove(source.bindingAdapterPosition, target.bindingAdapterPosition)
return true
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
adapter.onItemDismiss(viewHolder.bindingAdapterPosition)
}
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
(viewHolder as? ItemTouchHelperViewHolder)?.onItemSelected()
}
super.onSelectedChanged(viewHolder, actionState)
}
override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
super.clearView(recyclerView, viewHolder)
(viewHolder as? ItemTouchHelperViewHolder)?.onItemClear()
}
}
实现对应接口
条目Adapter实现ItemTouchHelperAdapter
override fun onItemMove(fromPosition: Int, toPosition: Int): Boolean {
if (fromPosition == 0 || toPosition == 0) {
return false
}
Collections.swap(items, fromPosition, toPosition)
notifyItemMoved(fromPosition, toPosition)
return true
}
override fun onItemDismiss(position: Int) {
}
创建SimpleItemTouchHelperCallback对象绑定Adapter,关联RecyclerView
val callback = SimpleItemTouchHelperCallback(adapter)
val touchHelper = ItemTouchHelper(callback)
touchHelper.attachToRecyclerView(recyclerView)