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가지로 이뤄질 수 있다.
ItemTouchHelper.CallBack()
을 상속받아 구현하기object
키워드를 사용하여 익명 객체로 구현하기ItemTouchHelper.CallBack()
을 구현하기 위해 다음과 같은 3가지 함수가 필수적으로 재정의 되어야한다.
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
onMove()
: 아이템을 드래그하여 이동할 때 호출된다.override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean = false