Development record of developer who study hard everyday.

레이블이 안드로이드viewmodel인 게시물을 표시합니다. 모든 게시물 표시
레이블이 안드로이드viewmodel인 게시물을 표시합니다. 모든 게시물 표시
, , , ,

안드로이드 뷰모델(ViewModel)의 상태저장: SavedStateHandle

스마트폰 화면을 좌우로 돌렸을 때 화면의 데이터가 날아가지 않게하는 방법은 뷰모델을 사용해서 데이터를 저장하고 조작하는 것이다.

그런데 시스템에서 시작된 프로세스 중단 상황에서 데이터를 보존하려면 어떻게 해야할까?

바로 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를 내가 원하는 키와 기본값을 활용하여 가져올 수 있다.










Share:
Read More