과제/챌린지반과제

ListAdapter

crablo 2024. 4. 20. 20:33
728x90

이번 챌린지반 과제로 리스트 어댑터를 이용하여 이미지검색을 구현하는 과제가있었는데

그전에 개념을 잘 몰랐기때문에 

https://www.youtube.com/watch?v=zNGVicOZ2ew&t=662s

해당 영상을 보고 리스트뷰에대해 공부하게되었고, 예제도 따라했다.

영상을보고 내가 정리한 개념은 다음과 같다.

 

DiffUtil - 두개의 데이터 셋을 받아서 그 차이를 계산해주는 클래스이다.

두 데이터 셋을 비교해서 변한부분만 파악해서 리싸이클러뷰에 반영한다.

DiffUtil을 사용하기 위해선 diffutilcallback 을 상속받아서

-areItemsTheSame(): 두 객체가 동일한지

-areContentsTheSame(): 두 아이템의 내용이 동일한 데이터를 가지는지 확인

 

위 2개의 메서드를 사용해서 두 객체가 동일한지 그리고 내용이 동일한지 비교한다.

DiffUtil은 아이템 갯수가 많을 경우 백그라운드 스레드에서 처리되어야하는데

이 DiffUtil을 편하게 쓰기 위해 만들어진 클래스가 AsyncListDiffer이다.

AsyncListDiffer클래스는 DiffUtil에 대해 자체적으로 스레드 처리를 해주는 클래스이다.

AsyncListDiffer 클래스를 통해 객체를 생성하고 그 객체에서 새로들어온 리스트를

submitList를 통해 전달하고

getCurrentList메서드를 통해 현재 데이터를 참조한다.

ListAdapter는

-AsyncListDiffer를 더 쓰기 편하도록 랩핑한 클래스이다

-리싸이클러뷰 어댑터가 ListAdapter를 상속하게 하고

초기화시 DiffUtil 콜백 객체를 넘겨준다.

-submitList()로 전체 데이터를 넘겨주면 어댑터가 백그라운드 스레드를 사용해 리스트 차이를 계산하여

화면을 갱신 시켜준다.

 

 

 

728x90