Draggable Recyclerview in KOTLIN

Himanshu Sharma
2 min readAug 13, 2017

--

User can easily arrange list items or priorities by drag and drop.

Hello Readers,

How user will feel if he/she can arrange items by just touching finger.

Obviously good!! So lets get started with code.

I am using same code base from my last post. Please check this post here

Hopefully you checked the code, in addition we need one adapter to handle drag and drop funtionality.

1- First add ItemTouchHelper to your recyclerview add below code to in your activity file.

val manager  = LinearLayoutManager(this)
rv_name.layoutManager = manager
val itemAdapter = NameAdapter(getNameList(), this)
rv_name.adapter = itemAdapter

val dividerItemDecoration = DividerItemDecoration(this , manager.orientation)
rv_name.addItemDecoration(dividerItemDecoration)


// Setup ItemTouchHelper
val callback = DragManageAdapter(itemAdapter, this,
ItemTouchHelper.UP.or(ItemTouchHelper.DOWN), ItemTouchHelper.LEFT.or(ItemTouchHelper.RIGHT))
val helper = ItemTouchHelper(callback)
helper.attachToRecyclerView(rv_name)

2-Create a file name DragManageAdapter

class DragManageAdapter(adapter: NameAdapter, context: Context, dragDirs: Int, swipeDirs: Int) : SimpleCallback(dragDirs, swipeDirs)
{
var nameAdapter = adapter

override fun onMove(recyclerView: RecyclerView?, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean
{
nameAdapter.swapItems(viewHolder.adapterPosition, target.adapterPosition)
return true
}

override fun onSwiped(viewHolder: RecyclerView.ViewHolder?, direction: Int)
{
}

}

3- Add this function in NameAdapter file

/**
* Function called to swap dragged items
*/
fun swapItems(fromPosition: Int, toPosition: Int) {
if (fromPosition < toPosition) {
for (i in fromPosition..toPosition - 1) {
nameList.set(i, nameList.set(i+1, nameList.get(i)));
}
} else {
for (i in fromPosition..toPosition + 1) {
nameList.set(i, nameList.set(i-1, nameList.get(i)));
}
}

notifyItemMoved(fromPosition, toPosition)
}

Now run your code and see the output. See below

Draggable Recyclerview

Thanks!!

--

--