728x90
반응형
문제의 발단
최근 프로젝트에서 요즘 많이 쓰이는 ListAdapter(feat.DiffUtil)을 사용해보게 되었다.
나는 멤버변수로 MutableList를 가지고 있었고,
해당 리스트를 add, remove로 수정하고 submitList의 파라미터로 전달했다.
그런데 RecyclerView가 새로고침되지 않았다.
발생 원인
ListAdapter에게 submitList로 리스트를 전달하면
ListAdapter 내부의 AsyncListDiffer 멤버변수의 submitList를 호출한다.
해당 메소드는 멤버로 이전에 전달받은 list를 가지고 있고,
기존 멤버변수와 전달받은 파라미터의 list를 비교한다.
만약 두 리스트가 같다면 함수를 리턴한다.
(여기서 같다는 의미는 메모리 주소가 같다는 것을 의미한다.
AsyncListDiffer.java가 ==을 통해 비교하고 있기 때문이다.)
해결
submitList 파라미터에 전달할 리스트를 새로 만들어 전달한다.
myMutableList.toMutableList()
와 같이 말이다.
혹자는 '이게 무슨 코드냐' 라고 물어볼 수 있지만, toMutableList 메소드는 Collection interface에도 사용할 수 있고
이는 새로운 객체를 생성해 리턴해준다.
728x90
반응형
'Android' 카테고리의 다른 글
Android APK Decompile(Proguard 적용 확인) (0) | 2024.06.12 |
---|---|
Android UDP 통신해보기 in Kotlin (0) | 2024.04.20 |
Android Selector 사용 시 주의사항 (1) | 2024.04.06 |
Android Change TextField Cursor Color (0) | 2024.03.13 |
Android UrlQuerySanitizer getValue error (0) | 2024.02.06 |