[kotlin] 리사이클러뷰의 아이템 뷰를 드래그 앤 드롭하여 이동시키기

안녕하세요! 안드로이드 앱을 개발하다보면 리사이클러뷰의 아이템들을 드래그 앤 드롭하여 순서를 변경할 수 있는 기능을 구현해야 할 때가 있습니다. 이번에는 Kotlin을 사용하여 안드로이드에서 리사이클러뷰 아이템을 드래그 앤 드롭하여 이동시키는 방법에 대해 알아보겠습니다.

1. ItemTouchHelper 클래스 활용

드래그 앤 드롭 동작을 구현하기 위해서는 ItemTouchHelper 클래스를 사용할 수 있습니다. 이 클래스를 사용하여 아이템을 드래그하거나 스와이프하여 이동할 수 있는 기능을 간단하게 구현할 수 있습니다.

val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(
    ItemTouchHelper.UP or ItemTouchHelper.DOWN,
    ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
) {
    override fun onMove(
        recyclerView: RecyclerView,
        viewHolder: RecyclerView.ViewHolder,
        target: RecyclerView.ViewHolder
    ): Boolean {
        // 아이템 이동 로직 구현
        return true
    }

    override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
        // 아이템 스와이프 로직 구현
    }
})

itemTouchHelper.attachToRecyclerView(recyclerView)

위의 코드에서 ItemTouchHelper를 사용하여 드래그 앤 드롭 기능을 구현할 수 있습니다. onMoveonSwiped 메서드를 오버라이드하여 각각 아이템을 드래그했을 때와 스와이프했을 때의 동작을 구현할 수 있습니다.

2. 아이템 위치 변경 처리

onMove 메서드에서 아이템을 이동시키는 로직을 구현해야 합니다. 드래그 앤 드롭으로 아이템을 이동시킬 때, 해당 동작에 대한 처리를 해주어야 합니다.

override fun onMove(
    recyclerView: RecyclerView,
    viewHolder: RecyclerView.ViewHolder,
    target: RecyclerView.ViewHolder
): Boolean {
    val fromPosition = viewHolder.adapterPosition
    val toPosition = target.adapterPosition
    // 아이템 위치 변경 처리 로직
    // 데이터셋을 업데이트하고, 리사이클러뷰 어댑터에 notifyItemMoved 메서드를 호출하여 변경을 알립니다.
    recyclerView.adapter?.notifyItemMoved(fromPosition, toPosition)
    return true
}

onMove 메서드에서는 아이템이 이동된 위치를 실제 데이터 소스에 반영하고, notifyItemMoved 메서드를 호출하여 리사이클러뷰에 변경을 알립니다.

3. 마무리

이렇게 ItemTouchHelper를 사용하여 리사이클러뷰의 아이템을 드래그 앤 드롭하여 이동시키는 기능을 구현할 수 있습니다. 이를 통해 사용자가 앱 화면에서 아이템의 순서를 쉽게 변경할 수 있는 편리한 기능을 제공할 수 있습니다.

위 코드는 KotlinAndroidX 라이브러리를 사용하여 작성되었습니다. 아래의 링크에서 관련 자료를 참고하시면 도움이 될 것입니다.