
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
'Android > Android Core' 카테고리의 다른 글
[Android] 안드로이드에서 BroadcastReceiver 활용하기: 정적 및 동적 등록과 명시적 vs 암시적 브로드캐스트 전송 이해하기 (0) | 2024.04.05 |
---|---|
[Android] 안드로이드에서 WindowManager를 활용하여 윈도우 위치 최상단으로 설정하기 (2) | 2024.04.04 |
[ Android ] Android에서 Selector 사용 시 상태 정의 순서의 중요성 이해하기 (1) | 2024.03.26 |
[Android] Android 레이아웃 재사용의 마법사: Include 태그와 데이터 바인딩 활용하기 (0) | 2024.03.25 |
[Android] Android에서 전역 상태 관리: Application 클래스 활용하기 (0) | 2024.03.25 |