Adapter?
데이터를 받아오고 이를 레이아웃에 직접 연결하는 함수를 실행시키는 클래스
⇒ ListView나 App의 특정 데이터와 RecyclerView의 view를 Bind하는 것을 도와줌
⇒ NotifyDataSetChanged 를 사용하는 경우 데이터를 모두 업데이트함
하지만 바뀌지 않는 항목이 더 많은 경우 비효율적임
∴ DiffUtil + ListAdapter를 통해 변경되는 항목만 변경할 수 있음
Adapter에 DiffUtil 구현
companion object {
val diffUtil = object : DiffUtil.ItemCallback<Repo>() {
override fun areItemsTheSame(oldItem: Repo, newItem: Repo): Boolean {
return oldItem.name == newItem.name
}
override fun areContentsTheSame(oldItem: Repo, newItem: Repo): Boolean {
return oldItem == newItem
}
}
}
areItemsTheSame
areContentsTheSame 체크areContentsTheSame
ListAdapter 생성
class RepoAdapter(context: Context) : ListAdapter<Repo, RepoAdapter.RepoViewHolder>(diffUtil)
Adapter를 사용할 Fragment or Activity에서 submitList 로 데이터를 넘겨줌
repoAdapter.submitList(viewModel.mockRepoList)
onBindViewHolder() 수정 (나머지는 동일하게! But getItemCount 는 필요 X)
override fun onBindViewHolder(holder: RepoAdapter.RepoViewHolder, position: Int) {
holder.onBind(currentList[position])
}