DiffUtil로 RecyclerView효율화하기
2023. 5. 3. 16:22ㆍ개발/Android
최근에 recyclerview를 만지다보니.. diffutil을 조금 더 찾아보는 계기가 되었다.
사실 크게 관심은 없고 다들 그렇게 사용하니 사용하다가 .. ㅎㅎ
DiffUtil이란?
- 리스트를 업데이트하는 유틸리티 클래스. RecyclerView 어댑터의 업데이트를 계산하는 데 사용된다
- 리스트에 변경된 부분만을 감지하여 갱신시켜주는 것!
- 예상 시간은 O(N + D^2)
class StudentAdapter : ListAdapter<Student, StudentAdapter.ViewHolder>(StudentCallback()) {
inner class ViewHolder(private val itemView: View) : RecyclerView.ViewHolder(itemView){
........
........
}
class StudentCallback : ItemCallback<Student>(){
override fun areItemsTheSame(oldItem: Student, newItem: Student): Boolean {
return oldItem.studentId == newItem.studentId
}
override fun areContentsTheSame(oldItem: Student, newItem: Student): Boolean {
return oldItem == newItem
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.student_item, parent, false))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
......
......
}
}
data class Student(
val studentId: Int,
val name: String,
val marks: Int
)
→ areItemsTheSame의 경우, oldItem = Student(1, “도일”, 50), newItem = Student(1, “도일”, 60)이면 true 반환됨
→ areTheContentsTheSame은 모두 같은 값일때만 true를 반환
contents의 변형을 감지했다면 아래와 같이
studentAdapter.submitList(newList)
'개발 > Android' 카테고리의 다른 글
6 Design Patterns Every Android Developer Must Know (0) | 2023.05.03 |
---|---|
알아두면 좋은 Kotlin extension (0) | 2023.05.03 |
onBackPressed() deprecated issuede (0) | 2023.03.10 |
android sdk 31 타겟팅 (0) | 2022.11.17 |
라디오 다이얼로그 컴포넌트 제작기 (0) | 2022.11.07 |