현재 문제
- 한 화면당 하나의 UIState 안에 화면에 표시될 데이터를 담고 있다.
- 지도 화면이 있는 UiState는MarkerOptions의 형태로 저장되어 있는 마커와, 현재 선택된 마커의 고유값의 정보를 포함한다.
- 선택된 마커가 변경이 될 때마다 UiState의 변경이 Trigger된다.
- UiState의 변경을 View가 감지하면, Map에 존재하는 모든 Maker를 제거하고, 모든 마커를 다시 그리게 된다.
- 선택된 마커가 변경되었을 때에도 모든 마커를 그리게 되어서 불필요한 리소스를 사용하게 된다.
목표
- 변경이 된 마커만 새로 그릴 수 있도록 구현.
아이디어
선택된 마커를 Marker Type으로 ViewModel에서 가지고있어야 한다.
선택된 마커가 변경이 될 때
- 선택 상태에서 선택이 해제된 마커는 다시 그리기.
- 선택된 마커는 다시 그리
구현 순서
우선, UiState 안에 있는 posts(게시물들의 리스트)를 분리하고, MarkerOptions를 가지고 있던 것을 Marker 객체를 가지고 있을 수 있도록 변경한다.
MainActivity에서 posts를 감지하고, 게시물이 변경이 되었을 때, marker들을 생성, viewmodel에 전달.
viewmodel에서는 전달받는 marker를 UiState에 업데이트