일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ListAdapter DiffUtil
- kotlin list
- ListAdapter
- doc2vec
- 스피너
- DiffUtil.ItemCallback
- 독서
- ExoPlayer
- android ktor
- kotlin collection
- AWS EC2
- 안드로이드
- exoplayer cache
- android exoplayer
- FastAPI
- android
- android custom view
- ChatGPT
- ktor client
- llm
- map
- video caching
- ktor api call
- build with ai
- getChangePayload
- ansi2html
- list map
- Python
- 시행착오
- 유튜브
- Today
- Total
목록ListAdapter (2)
버튼 수집상
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bulUs5/btsnui4YupO/UgO6S25nSYKOTCxZ51Qyg1/img.gif)
1편에서 ListAdapter에 submitList를 하면서 기존 리스트를 업데이트할 때 리스트 깊은 복사deep copy를 해야 하는 이유에 대해 적었다. 이번엔 ListAdapter DiffUtil의 각 함수를 자세히 알아보겠다. 샘플 코드 전체는 1편에 있다. DiffUtil.ItemCallback 에 구현해야하는 함수 2가지가 있다. areContentsTheSame : 리스트 요소의 객체 주소를 비교한다 areItemsTheSame : 리스트 요소의 필드값을 비교한다 함수 이름만 보면 하는 일이 반대가 돼야할 것 같은데 아무튼 그렇다. areItemsTheSame에서 변경사항을 감지하고 싶은 값을 비교해서 UI를 업데이트할 수 있다. 예제 데이터 SimpleObject의 isChecked 값을 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/mSC0Y/btsnpVoFtBU/azZk1UaPimZTgI4lHVxetK/img.gif)
배경 리사이클러뷰에서 부분적으로 UI를 업데이트할 때 (ex: 찜하기) 업데이트한 리스트를 submitList()로 세팅해도 DiffUtil이 제대로 돌아가지 않는 경우가 있었다. 리스트 변경사항을 제대로 감지하는 경우를 알기 위해 샘플 프로젝트를 구성해봤다. 샘플 프로젝트 구조 리스트 아이템을 클릭하면 api를 변경된 index를 호출한 뒤 리스트에 반영. api의 결과로 새 리스트를 뿌리는 구조는 비효율적이라고 판단했다. 참고한 앱도 변경값만 리턴하고 있었다. 샘플 데이터 클래스 data class SimpleObject( var name : String, var isChecked : Boolean = false ) BaseActivity.kt abstract class BaseActivity(lay..