버그 잡이

RecyclerView 선택 삭제, action Mode, contextual action bar 본문

안드로이드

RecyclerView 선택 삭제, action Mode, contextual action bar

버그잡이 2019. 10. 20. 22:42

 

 

오늘은 위와 같은 기능을 만들어보겠습니다.

정확히는 위와 같은 기능을 만든 외국 자료를 바탕으로 정리해보겠습니다.

 

https://blog.teamtreehouse.com/contextual-action-bars-removing-items-recyclerview

 

Contextual Action Bars: Removing Items from a RecyclerView

In this post, we’ll be looking at the Contextual Action Bar (CAB). CABs are a great way to let your users select multiple items and then take action on all of those items at once.

blog.teamtreehouse.com

 

내용이 어렵지 않으니 원문을 먼저 읽고 도전해보신 후 제 글을 부가적으로 보시는 것을 추천드립니다.

*그리고 코드가 분산되어 있으니 전체적인 흐름 이해를 위해 원문의 github 자료와 함께 보시는 것을 추천드립니다.

 


 

1.  롱 클릭(long-click) 했을때 CAB가 실행되도록 만들어보자. 이를 위해서는 우선 'startSupportActionMode'를 불러와야한다.

(Adapter -> class Viewholder -> void update 생성 후 안에 코드를 작성해주시면 됩니다.(원문 깃허브 참조))

 

 

*참고로 저는 위와 같이 쳤을때, "actionModeCallbacks" 부분에 빨간 밑줄이 생겼습니다. 

해결방법을 구글링 해본 결과 startSupportActionMode() 를  startActionMode() 로 바꿔주니 해결이 되었습니다.

출처: <https://stackoverflow.com/questions/37721983/cannot-start-actionmode-callback-in-android-for-listview-itemlongclick>

 

 

 

 

2. 다음으로 actionModeCallbacks 객체를 채워줘야 합니다.

 

 

*onCreateActionMode : actionMode 작동시 처리 -> 여기서는 'delete' 메뉴 생성

*onPrepareActionMode : 음... 잘 모르겠습니다. 하지만 이거는 안 건드려도 잘 작동됩니다.

*onActionItemClicked : delete 버튼을 눌렀을때 처리

*onDestroyActionMode : actionMode 종료 -> mode.finish()

 

(각 항목을 채우면 아래와 같습니다.)

 

 

 

 

3. CAB의 시작은 ActionMode 이전에 update라는함수에서 시작합니다.

 

 

여기서 주목할 부분은 selectItem 이라는 메서드입니다.

이름 그대로 선택된 항목을 관리(추가, 삭제)해주는 메서드입니다. (추후에 이 항목을 가지고 remove를 하겠죠?) 

 

선택시 selectedItems라는 배열에 추가해주고 선택된 항목을 한번 더 눌르면 배열에서 제거가 됩니다.

(물론 이를 위해서는 selectedItem이라는 배열을 선언해줘야겠죠? *원문의 github 자료 참고)

 

 


 

자 이렇게 기본적인 개념을 알아보았습니다.

제 글로 기본 개념만 익히시고 원문의 github자료를 보며 따라 쳐보시면 쉽게 만드실 수 있을겁니다!

 

 

 

(주의!!)

onBindViewHolder에 아래와 같이 update를 추가해주시는 것을 잊지마세요.

저도 처음에 이걸 놓쳐서 왜 실행이 안되는지 한참을 해맸습니다ㅜㅜ

 

반응형
Comments