[Android/kotlin] RecyclerView ListAdapter + Diffutil

JINA·2021년 11월 24일
0

Android/basic

목록 보기
6/6
post-thumbnail

ListAdapter란?

기본적으로 RecyclerView를 사용하기 위해서는 Adapter, LayoutManager, ViewHolder가 필요한데 Adapter는 데이터 리스트를 실제 눈으로 볼 수 있게 item으로 변환하는 중간다리 역할을 한다.

기존에 notifyDataSetChanged()를 통해 데이터를 업데이트하면 조금만 바뀌어도 나머지 데이터도 모두 업데이트되는 불필요함이 있었는데 ListAdapter를 사용하게되면 백그라운드 스레드에서 DiffUtil를 통해 불필요한 교체 비용을 줄일 수 있다.

DiffUtil

RecyclerView의 성능을 개선할 수 있게 해주는 유틸리티 클래스로 현제 데이터 리스트와 교체될 리스트를 비교해서 무엇이 바뀌었는지 비교해서 바뀐 부분의 데이터만 바꿔준다.

AsyncListDiffer

DiffUtil을 더 편리하게 사용할 수 있게 해주는 클래스다. 백그라운드 스레드에서 처리하도록 지원해주며 AsyncListDiffer의 submitlist 메서드를 통해 이 모든과정이 처리된다.

binding + ListAdapter + AsyncListDiffer 사용방법

  • 아이템을 비교하기 위한 DiffUtil.ItemCallback을 구현한다.

  • areItemsTheSame(): oldItem과 newItem이 동일한지 확인하는데 item을 구분할 수 있는 값을 사용한다.

  • areContentsTheSame(): areItemsTheSame()이 true일때 호출되며, oldItem과 newitem이 같은 데이터를 포함하는지 확인하는데 데이터 클래스의 모든 필드를 비교한다. 두 아이템 사이에 차이점이 있는경우 DiffUtil에 업데이트 되었다고 알려준다.

  • Adapter 내부에 getItemCount(), submitList()등 원하는 메소드를 사용한다.

  • getItemCount(): protected method로 클래스 내부에서 사용하고 ListAdapter + Diffutil에서는 리스트의 아이템을 가져오는데 사용된다.

  • submitList(): 일반 어댑터의 add(), notifyDataSetChanged() 대신 사용하고 리스트를 변경할 때 사용한다.

참고사이트1
참고사이트2

0개의 댓글