You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
notifyDataSetChanged() 를 호출하면 어댑터에게 리사이클러뷰 데이터가 변경되었음을 알리고, 모든 항목을 업데이트하게 됩니다. 이때 어떤 데이터가 변경되었는지는 알려주지 않기 때문에 한 개의 항목이라도 바뀌면 ViewHolder 자체를 갈아끼우는데, 리사이클러뷰의 크기가 커질수록 비효율적이겠죠? 그리고 아이템에 삭제나 추가 애니메이션도 넣기 어렵다고 합니다. (변경된 순간 모든 아이템을 다시 불러오니 어쩌면 당연한 일)
그래서 DiffUtil과 우리가 피드백으로 받기도 한 ListAdapter의 도입을 제안하려고 합니다.
DIffUtil은 두 리스트를 비교하고 차이를 계산해주는 유틸리티 클래스입니다. 리사이클러뷰는 이를 활용해 변경된 아이템만 업데이트를 해줄 수 있는데요, DiffUtil은 아이템 개수가 많아질수록 비교연산 시간이 길어지기 때문에 백그라운드 스레드에서 처리되어야 합니다.
직접 백그라운드 스레드에서 비교 처리를 수행하고 결과를 메인 스레드에서 처리하도록 구현하는 번거로움을 없애기 위해 보통 AsyncListDiffer를 사용합니다.
위에서 말한 AsyncListDiffer를 사용하는 것보다 더 간단한 방법이 있는데, 바로 AsyncListDiffer를 내부적으로 사용하는 ListAdapter를 쓰는 것입니다. 일반 리사이클러뷰 어댑터랑 비교해보면 getItemCount()가 없는대신 아이템의 정보를 가져오는 getItem(position) 메서드가 있습니다.
스밈 코드에서는 리사이클러뷰의 데이터를 구성하거나 변경하기 위해 아래 코드와 같이 써왔는데요,
이 중
notifyDataSetChanged()
에서 이 주의사항을 본 적이 있을겁니다.notifyDataSetChanged()
를 호출하면 어댑터에게 리사이클러뷰 데이터가 변경되었음을 알리고, 모든 항목을 업데이트하게 됩니다. 이때 어떤 데이터가 변경되었는지는 알려주지 않기 때문에 한 개의 항목이라도 바뀌면 ViewHolder 자체를 갈아끼우는데, 리사이클러뷰의 크기가 커질수록 비효율적이겠죠? 그리고 아이템에 삭제나 추가 애니메이션도 넣기 어렵다고 합니다. (변경된 순간 모든 아이템을 다시 불러오니 어쩌면 당연한 일)그래서
DiffUtil
과 우리가 피드백으로 받기도 한ListAdapter
의 도입을 제안하려고 합니다.DiffUtil
DIffUtil
은 두 리스트를 비교하고 차이를 계산해주는 유틸리티 클래스입니다. 리사이클러뷰는 이를 활용해 변경된 아이템만 업데이트를 해줄 수 있는데요, DiffUtil은 아이템 개수가 많아질수록 비교연산 시간이 길어지기 때문에 백그라운드 스레드에서 처리되어야 합니다.직접 백그라운드 스레드에서 비교 처리를 수행하고 결과를 메인 스레드에서 처리하도록 구현하는 번거로움을 없애기 위해 보통 AsyncListDiffer를 사용합니다.
ListAdapter
위에서 말한
AsyncListDiffer
를 사용하는 것보다 더 간단한 방법이 있는데, 바로 AsyncListDiffer를 내부적으로 사용하는ListAdapter
를 쓰는 것입니다. 일반 리사이클러뷰 어댑터랑 비교해보면getItemCount()
가 없는대신 아이템의 정보를 가져오는getItem(position)
메서드가 있습니다.이것도 참고하십쇼
https://developer.android.com/codelabs/kotlin-android-training-diffutil-databinding#0
The text was updated successfully, but these errors were encountered: