프로그래밍(programming)/안드로이드(android)

[210804] 안드로이드 리사이클러뷰(RecyclerView) 아이템 업데이트

하빌리즘 2021. 8. 5. 00:06
반응형

 '리사이클러뷰(RecyclerView)'는 아이템 뷰를 '인플레이션(Inflation, 팽창)'시켜서 리스트 형식으로 나타내며

앱을 제작할 때 많이 사용되는 뷰 중 하나이다. 

 아이템을 추가하고, 수정하고, 삭제하기 등의 처리를 하고 업데이트를 하는 것이 핵심적이기 때문에

확실히 알아두는 것이 중요하다. 

 

 아이템들은 ArrayList에 담아두고 관리하고, 필요한 메소드들을 호출한 후에 업데이트하는 방식으로

리사이클러뷰를 처리하게되는데, 이렇게 아이템들을 업데이트하는 5가지 방법에 대해서 알아보자. 

 

 우선 5가지 업데이트 방법에는 전체 갱신, 변경, 추가, 삭제, 이동 이 있다. 

 

 첫 번째로는 '전체 갱신'이다. 이 때 사용하는 메소드가 notifyDataSetChanged()인데, 사용하기 편하고

자주 사용한다. 이 메소드는 리스트의 크기와 아이템이 모두 변경되는 경우에 사용하면 되므로

어느 상황에서나 사용 가능하다는 장점이 있지만 웬만하면 각 상황에 해당되는 메소드들을 사용해주는 것이 좋다. 

 

 두 번째로는 '변경'이다. 일부만 바꾸고 싶은 경우 굳이 전체를 갱신할 필요가 없으므로 특정 위치의 아이템만 바꾸고

싶으면 이 메소드들을 사용하면 되는데 notifyItemChanged() 메소드와 notifyItemRangeChanged() 메소드가 있다. 

 

notifyItemChanged() 메소드는

notifyItemChanged(int position)와 notifyItemChanged(int position, Object payload)가 있는데

position은 변경된 아이템의 위치, payload는 어댑터의 onBindHolder()가 호출될 때 넘겨받는 객체이다. 

 

notifyItemRangeChanged() 메소드는

notifyItemRangeChanged(int positionStart, int itemCount)와 notifyItemRangeChanged(int position, int itemCount, 

Object payload)가 있는데 positionStart는 변경된 첫 번째 아이템의 위치, itemCount는 변경된 아이템의 개수, 

payload는 어댑터의 onBindHolder()가 호출될 때 넘겨받는 객체이다. 위 notifyItemChanged() 메소드와는 다르게

변경된 아이템이 복수의 아이템일 때 사용한다. 

 

 세 번째는 '추가'이다.

notifyItemInserted(int position) : 특정 위치에 새 아이템을 삽입할 때 사용한다. 

파라미터의 position이 0부터 시작한다는 것에 유의해야한다. 

notifyItemRangeInserted(int positionStart, int itemCount) : 복수의 아이템을 삽입할 때 사용한다. 

 

 네 번째는 '삭제'이다. 

notifyItemRemoved(int position) : 특정 위치의 아이템 1개를 삭제할 때 사용한다. 

notifyItemRangeRemoved(int positionStart, int itemCount) : 복수의 아이템을 삭제할 때 사용한다. 

 

 마지막으로는 '이동'이다. 

notifyItemMoved(int fromPosition, int toPosition) : 아이템의 순서가 변경되는 등 아이템을 이동할 때 사용한다. 

 

 이렇게 리사이클러뷰의 아이템들을 업데이트하는 방법에 대해 알아보았다. 

앱개발자라면 자주 사용하는 리사이클러뷰이기 때문에 확실히 알아두도록 하자.

 

피드백은 언제나 환영입니다. 

반응형