일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Zsh
- ListAdapter
- FastAPI
- ChatGPT
- 스피너
- android ktor
- ktor client
- doc2vec
- exoplayer cache
- ExoPlayer
- android
- 유튜브 요약
- AWS EC2
- ktor api call
- video caching
- 시행착오
- map
- llm
- 안드로이드
- 유튜브
- android exoplayer
- DiffUtil.ItemCallback
- kotlin list
- list map
- android custom view
- ListAdapter DiffUtil
- kotlin collection
- build with ai
- Python
- getChangePayload
- Today
- Total
목록ListAdapter (2)
버튼 수집상

1편에서 ListAdapter에 submitList를 하면서 기존 리스트를 업데이트할 때 리스트 깊은 복사deep copy를 해야 하는 이유에 대해 적었다. 이번엔 ListAdapter DiffUtil의 각 함수를 자세히 알아보겠다. 샘플 코드 전체는 1편에 있다. DiffUtil.ItemCallback 에 구현해야하는 함수 2가지가 있다. areContentsTheSame : 리스트 요소의 객체 주소를 비교한다 areItemsTheSame : 리스트 요소의 필드값을 비교한다 함수 이름만 보면 하는 일이 반대가 돼야할 것 같은데 아무튼 그렇다. areItemsTheSame에서 변경사항을 감지하고 싶은 값을 비교해서 UI를 업데이트할 수 있다. 예제 데이터 SimpleObject의 isChecked 값을 ..

배경 리사이클러뷰에서 부분적으로 UI를 업데이트할 때 (ex: 찜하기) 업데이트한 리스트를 submitList()로 세팅해도 DiffUtil이 제대로 돌아가지 않는 경우가 있었다. 리스트 변경사항을 제대로 감지하는 경우를 알기 위해 샘플 프로젝트를 구성해봤다. 샘플 프로젝트 구조 리스트 아이템을 클릭하면 api를 변경된 index를 호출한 뒤 리스트에 반영. api의 결과로 새 리스트를 뿌리는 구조는 비효율적이라고 판단했다. 참고한 앱도 변경값만 리턴하고 있었다. 샘플 데이터 클래스 data class SimpleObject( var name : String, var isChecked : Boolean = false ) BaseActivity.kt abstract class BaseActivity(lay..