마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

RecyclerView ItemTouchHelper

0 추천
안녕하세요 Drag & Drop 질문이 있습니다.

현재 RecyclerView ItemTouchHelper을 구현하여 Item의 Position을 변경하고 있습니다.

기존 사양은 RecyclerView Item의 모든 부분을 선택해서 Drag & Drop이 이루어져도 상관이 없었는데

현재는 사양이 변경되어 Item의 특정 Button을 클릭하였을때만 길게 터치를 하여 Drag & Drop이 이루어져야 합니다.

여기서 질문이 있습니다. 이 경우에는 ItemTouchHelper를 이용해서 구현 할 수 있을까요? 아니면 다른 방법을 사용해야 할까요?

해당 유틸리티 클래스는 Item의 Poistion을 이동시키는 것 같은데, 그 특정 버튼을 선택했을때만 가능할 지 궁금하네요..
로논 (360 포인트) 님이 2022년 12월 3일 질문

1개의 답변

+1 추천
 
채택된 답변

가능하죠. 해당 버튼을 클릭할 때만 drag & drop이 되도록 메소드를 오버라이드 하면 됩니다.

ItemTouchHelper가 좌우 swipe과 drag & drop을 둘다 지원하므로, 좌우 swipe은 죽이시고 drag & drop 만 살리시면 됩니다.

실제 구현된 코드는 아주 짧은 건 아니므로, 예제를 검색하셔서 참고하시면 됩니다.

키워드: Android RecyclerView drag & drop

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

https://androidapps-development-blogs.medium.com/drag-and-drop-reorder-in-recyclerview-android-2a3093d16ba2

간략하게만 말씀드리면,

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

위의 클래스를 보시면 아래와 같은 메소드가 두개 보이는데, 오버라이드 하신 다음 false를 리턴하면 될 것 같네요.

isItemViewSwipeEnabled() - swipe 방지
isLongPressDragEnabled() - long press할 때 자동으로 drag & drop이 시작되는 거 방지.

그리고 버튼을 누를 때는 startDrag(https://developer.android.com/reference/androidx/recyclerview/widget/ItemTouchHelper#startDrag(androidx.recyclerview.widget.RecyclerView.ViewHolder)를 호출해서 drag & drop을 시작시키면 되구요. 암튼 위의 문서들만 잘 보셔도 충분히 구현이 가능하실 거라고 봅니다.

 

spark (226,420 포인트) 님이 2022년 12월 3일 답변
로논님이 2022년 12월 4일 채택됨
답변 감사합니다!

isLongPressDragEnabled 메소드를 이용하여 값을 false로 설정 후 recyclerView Item 전부 drag & Drop을 금지 시키고, 해당 item holder의 특정 view에 setLongClickListener에 startDrag 함수를 호출하여 구현 할 수 있었습니다.
...