본문 바로가기

안드로이드

ViewModel - SavedStateHandle

반응형

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() 함수를 위와 같이 변경해주면 된다.

 

 
반응형