더 나은 방법이나 틀린 내용이 있을 시에 댓글 남겨주시면 감사하겠습니다.
2022-01-28 작성되었습니다.
[Android] RecyclerView 기본 사용법
🔍 DiffUtil이란?
안드로이드 공식 문서에서는
두 리스트의 차이를 계산하고 첫번째 리스트를 두번째 리스트로 변환하기 위한 업데이트 동작을 출력하는 유틸리티 클래스로 정의한다. (Eugene W.Myers's difference algorithm)
RecyclerView Adapter의 업데이트를 계산하는데 사용되며
notifyDataSetChanged(), notifyItemChanged() 등의 불필요한 사용을 지양할 수 있도록 도와준다.
✅ 주요 클래스
- DiffUtil.Callback
두 리스트의 차이를 계산할 때 DiffUtil에 의해 사용되는 콜백 클래스
- DiffUtil.DiffResult
DiffUtil.calculateDiff(Callback, boolean)호출의 결과에 대한 정보를 가지는 클래스
- DiffUtil.ItemCallback<T>
리스트의 null이 아닌 두 아이템의 차이를 계산한 콜백
✅ 구현
1. DiffUtil.Callback을 상속받는 CustomCallback 구현
- getOldListSize() : 이전 리스트의 크기
- getNewListSize() : 새로운 리스트의 크기
- areItemsTheSame() : 같은 아이템인지 비교하는 함수로 아이템의 고유한 id 값으로 비교할 수 있다.
- areContentsTheSame() : 아이템의 프로퍼티가 동일한지 비교하는 함수로 단순히 oldItem == newItem으로도 비교할 수 있지만 필자는 아이템의 세부항목들을 각각 비교했다.
2. Adapter에서 DiffCallback을 이용해 DiffResult를 반환받아 RecyclerView를 업데이트
어디까지나 샘플용이기 때문에 메인 스레드(Adapter)에서 작업했지만,
리스트의 크기가 클수록 딜레이가 생길 수 있다.
따라서 비동기 스레드에서 DiffUtil의 사용을 권장한다.
Sample Source Code: https://github.com/yc-park/droidyc-CustomView
GitHub - yc-park/droidyc-CustomView
Contribute to yc-park/droidyc-CustomView development by creating an account on GitHub.
github.com
'Android > Jetpack' 카테고리의 다른 글
[Android] RecyclerView에 DataBinding 활용하기 (0) | 2022.01.12 |
---|---|
[Android] DataBinding 살펴보기 (0) | 2022.01.12 |
[Android] RecyclerView 기본 사용법 (0) | 2022.01.11 |