RecyclerView의 drag, swipe기능을 담당하는 ItemTouchHelper 에 대해서 알아보자.

ItemTouchHelper 클래스는 utility 클래스로 RecyclerView의 swipe나 drag & drop기능을 지원한다.

그 중에서 swipe에 대해서 알아보자.

화면 기록 2023-06-25 오후 2.35.50.mov

아이템이 사라지진 않지만, 좌우 swipe가 가능하고, swipe 이벤트가(callback) 일어날 때

개발자가 이에 맞는 로직을 직접 추가해 줄 수 있다.

이제 코드로 스와이프가 어떻게 일어나는지 살펴보자.

사용방법

ItemTouchHelper(callback).attachToRecyclerView(binding.XXX)
public ItemTouchHelper(@NonNull Callback callback) {
    mCallback = callback;
}

ItemTouchHelper 의 구현체를 보면 파라미터로 Callback 클래스를 받고 있다.

callback 구현은 2가지로 이뤄질 수 있다.

override 함수

ItemTouchHelper.CallBack() 을 구현하기 위해 다음과 같은 3가지 함수가 필수적으로 재정의 되어야한다.

  1. getMovementFlags() : 아이템의 이동방법(drag, swipe)을 결정한다.
override fun getMovementFlags(
    recyclerView: RecyclerView,
    viewHolder: RecyclerView.ViewHolder
): Int {
		return makeMovementFlags(
        dragFlags,
        swipeFlags
    )
}

makeMovementFlags 함수를 사용하여 허용할 동작을 설정한다.

private val dragFlags = 0 // drag 허용 X
private val swipeFlags = ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
  1. onMove() : 아이템을 드래그하여 이동할 때 호출된다.
override fun onMove(
    recyclerView: RecyclerView,
    viewHolder: RecyclerView.ViewHolder,
    target: RecyclerView.ViewHolder
): Boolean = false