반응형
우리는 ListAdapter를 통해 효과적으로 RecyclerView의 데이터를 갱신할 수 있다. 그리고 새로운 데이터를 갱신할 때 submitList()
이용한다. 하지만 분명 데이터는 변경이 되었지만 실제적으로 RecyclerView에 갱신이 안 되는 경우가 있다. 그 이유는 submitList()
를 보면 알 수 있다.
Why?
submitList()
를 타고 가다보면 다음과 같은 코드가 있다. (AsynListDiffer.java 안에 submitList 함수)
if (newList == mList) {
// nothing to do (Note - still had to inc generation, since may have ongoing work)
if (commitCallback != null) {
commitCallback.run();
}
return;
}
보면 java에서 ==는 주소 값을 비교한다. 즉, 새로운 리스트와 기존 리스트가 주소가 같다면 리스트의 데이터가 변경이 되어도 반영되지 않는 것을 알 수 있다. 이를 통해 우리는 새로운 주소에 있는 데이터를 넘겨주어야 한다는 것을 알 수 있다. Kotlin에서 새로운 참조를 만드는 것은 그리 어렵지 않다.
결론
toMutableList()
는 인스턴스를 복사하여 새로운 인스턴스를 만들어 주는 함수이다. 즉 다른 주소를 갖는 데이터를 만들어준다. 이를 통해 데이터를 갱신해주면 된다.
adapter.submitList(it?.toMutableList())
반응형
'개발 > Android' 카테고리의 다른 글
[Android] Adapter에서 ViewModel 사용하기 (0) | 2022.03.30 |
---|---|
[Android] 빌드 시에 No cached version available for offline mode 에러 해결방법 (0) | 2022.03.17 |
[Android] DI(Dependency Injection)란? (0) | 2022.02.24 |
[Android] ViewModel 에서 Activity, Fragment 데이터 공유하기 (0) | 2022.02.16 |
[Android] 실시간 데이터 처리를 위한 STOMP 사용하기 (Kotlin) (0) | 2022.01.26 |
댓글