반응형
ViewModel에서 상태 저장을 위해선 SavedStateHandle를 사용하면 된다.
class SampleViewModel @ViewModelInject constructor(
@Assisted private val savedStateHandle: SavedStateHandle
){
companion object {
const val DATE_TYPE_KEY = "DATE_TYPE_KEY"
const val IS_EMPTY_KEY = "IS_EMPTY_KEY"
}
private val _isEmpty = savedStateHandle.getLiveData<Boolean>(IS_EMPTY_KEY)
val isEmpty: LiveData<Boolean> get() = _isEmpty
private var dateType: Int? = savedStateHandle.get<Int>(DATE_TYPE_KEY)
override fun onCleared() {
with(savedStateHandle)
set(DATE_TYPE_KEY, dateType)
}
}
}
1. savedStateHandle.getLiveData
LiveData 형식으로 값을 들고 올 수 있다.
LiveData 값을 변경하면 자동으로 savedStateHandle
값이 갱신된다.
fun loadSuccess(list : List<Any>){
savedStateHandle[IS_EMPTY_KEY] = list.isEmpty()
}
반대로 위와 같이 savedStateHandle
의 값을 변경시켜도 LiveData 값이 변경된다.
( 굳이 이렇게 쓸 필요는 못 찾겠다. )
2.savedStateHandle.get
당연히 그냥 값으로도 가져올 수 있다.
업데이트된다고 자동으로 갱신 같은 건 안 해준다.
override fun onCleared() {
with(savedStateHandle) {
set(DATE_TYPE_KEY, dateType)
}
}
값을 저장하고 싶다면 원하는 곳에서 하거나
onCleared()
함수를 위와 같이 변경해주면 된다.
반응형
'안드로이드' 카테고리의 다른 글
Error ) NavigationExtensions - does not have a NavController set (0) | 2021.02.03 |
---|---|
Dagger ( Hilt ) 2.31 - 변경된 ViewModel 주입 (0) | 2021.01.27 |
Retrofit - 세션 유지하기 (0) | 2021.01.06 |
Error ) ViewPager2 - onAttachedToRecyclerView (0) | 2021.01.03 |
Hilt - @SingletonComponent (0) | 2020.11.16 |