본문 바로가기
Android

[Android] ItemTouchHelper.Callback으로 리사이클러뷰 아이템을 마스터하는 방법: 주요 오버라이드 메서드와 그 역할

by quessr 2024. 4. 1.

 

ItemTouchHelper.Callback 클래스를 사용하면서 clearView 기능을 통해 드래그 앤 드롭 작업의 종료 시점을 감지할 수 있다는 것을 알게 되었다.
이 과정에서 ItemTouchHelper.Callback 클래스에는 clearView 외에도 다양한 유용한 오버라이드(Override) 메서드들이 있다는 것을 발견했다. 이러한 메서드들을 정리하여 기록해 두고자 한다.

ItemTouchHelper.Callback 클래스는 리사이클러뷰의 아이템을 드래그 앤 드롭하거나 스와이프할 때 사용자 정의 동작을 구현할 수 있도록 해주는 중요한 클래스이다.이 클래스를 통해 다음과 같은 여러 메서드들을 오버라이드할 수 있다.

 

isLongPressDragEnabled()

  • 역할: 길게 눌러서 드래그를 시작할 수 있는지 여부를 결정한다.
  • 사용법: 드래그 기능을 사용자의 긴 클릭에 의해서만 활성화하려면 이 메소드를 true로 반환하도록 그대로 두면 된다.
    만약 다른 조건이나 방법으로 드래그를 시작하고자 한다면, false를 반환하도록 오버라이드하고, ItemTouchHelper.startDrag(ViewHolder)를 수동으로 호출하여 드래그를 시작한다.
    필요에 따라 false를 반환하도록 이 메소드를 오버라이드하면 드래그를 비활성화 할 수 있다.

getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder)

  • 역할: 아이템이 드래그되거나 스와이프될 때 어느 방향으로 움직일 수 있는지를 지정한다.
  • 사용법: makeMovementFlags(int dragFlags, int swipeFlags) 메소드를 사용하여 드래그와 스와이프에 대한 방향을 지정할 수 있다.
    예를 들어, ItemTouchHelper.UP | ItemTouchHelper.DOWN은 상하 드래그를, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT은 좌우 스와이프를 의미한다.

onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target)

  • 역할: 드래그 중인 아이템이 새 위치로 이동될 때 호출된다.
  • 사용법: 이 메소드 내에서 아이템의 데이터를 업데이트하고 notifyItemMoved(fromPosition, toPosition)를 호출하여 RecyclerView에 변경 사항을 알려야 한다. 이 과정에서 데이터의 일관성을 유지하는 것이 중요하다.

onSwiped(RecyclerView.ViewHolder viewHolder, int direction)

  • 역할: 아이템이 스와이프될 때 호출된다.
  • 사용법: 스와이프된 아이템에 대한 로직(예: 데이터 삭제)을 구현합니다. 스와이프 후에는 notifyItemRemoved(position)을 호출하여 RecyclerView에 아이템이 제거되었음을 알린다.

canDropOver(RecyclerView recyclerView, RecyclerView.ViewHolder current, RecyclerView.ViewHolder target)

  • 역할: 드래그 중인 아이템을 다른 아이템 위에 놓을 수 있는지 결정한다.
  • 사용법: 특정 조건을 만족할 때만 아이템을 다른 아이템 위에 놓을 수 있도록 하려면, 이 메소드를 오버라이드하여 해당 조건을 구현한다. 기본적으로는 모든 아이템 위에 놓을 수 있도록 true를 반환한다.

clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder)

  • 역할: 드래그나 스와이프가 끝나고 아이템이 최종 위치에 정착했을 때 호출된다.
  • 사용법: 아이템의 상태를 초기화하거나, 드래그/스와이프 중에 적용된 변경사항(: 배경색 변경, 높이 변경 ) 원상태로 복구한다. 메소드는 아이템의 상호작용이 끝난 후의 정리 작업에 매우 중요하다.

 

이러한 메서드들을 적절히 오버라이드하여 리사이클러뷰의 아이템에 대한 드래그 앤 드롭 및 스와이프 동작을 사용자가 원하는 대로 커스터마이징할 수 있으며 이를 통해 더욱 풍부하고 직관적인 사용자 인터페이스를 제공할 수 있다.

 


참고 : https://developer.android.com/reference/androidx/recyclerview/widget/ItemTouchHelper.Callback