스마트폰 화면을 좌우로 돌렸을 때 화면의 데이터가 날아가지 않게하는 방법은 뷰모델을 사용해서 데이터를 저장하고 조작하는 것이다.
그런데 시스템에서 시작된 프로세스 중단 상황에서 데이터를 보존하려면 어떻게 해야할까?
바로 SavedStateHandle을 사용하면된다.
SavedStateHandle은 객체를 저장하고 검색할 수 있게 하는 키-캆 맵이다.
이 객체를 사용해서 프로세스가 중단된 후에도 저장된 값을 사용할 수 있다.
@HiltViewModel
class GalleryViewModel @Inject constructor(
private val repository: UnsplashRepository,
state: SavedStateHandle): ViewModel() {
private val currentQuery = state.getLiveData(CURRENT_QUERY, DEFAULT_QUERY)
//val photos = repository.getSearchResults("cats")
val photos = currentQuery.switchMap { queryString ->
repository.getSearchResults(queryString).cachedIn(viewModelScope)
}
fun searchPhotos(query: String) {
currentQuery.value = query
}
companion object {
private const val CURRENT_QUERY = "current_query"
private const val DEFAULT_QUERY = "cats"
}
}
위 코드는 유튜브 CodingInFlow 채널에 있는 코드를 따라치면서 공부했던 내용이다.
Hilt를 통해서 ViewModel을 주입했는데 GalleryViewModel의 생성자에 state: SavedStateHandle을 넣어주었다.
Hilt에서는 다른 annotation을 추가해주지 않아도 알아서 SavedStateHandle을 주입시켜준다.
GalleryViewModel의 프로퍼티인 currentQuery를 보자.
SavedStateHandle에서 LiveData를 내가 원하는 키와 기본값을 활용하여 가져올 수 있다.
댓글 없음:
댓글 쓰기