Я следовал инструкциям в Google Codelab относительно модуля сохраненного состояния.
Моя зависимость от gradle:
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03"
Фабрика My View Model:
class MyViewModelFactory(val repository: AppRepository, owner: SavedStateRegistryOwner,
defaultArgs: Bundle? = null) : AbstractSavedStateViewModelFactory(owner, defaultArgs) {
override fun <T : ViewModel?> create(
key: String,
modelClass: Class<T>,
handle: SavedStateHandle): T {
return MyViewModel(repository, handle) as T
}
}
Модель My View:
class MyViewModel constructor(val repository: AppRepository, private val savedStateHandle: SavedStateHandle): ViewModel() {
fun getMyParameter(): LiveData<Int?> {
return savedStateHandle.getLiveData(MY_FIELD)
}
fun setMyParameter(val: Int) {
savedStateHandle.set(MY_FIELD, val)
}
}
Мой фрагмент:
class MyFragment : androidx.fragment.app.Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
arguments?.let {
var myField = it.getInt(MY_FIELD)
activitiesViewModel.setMySavedValue(myField ?: 0)
}
}
}
При использовании приложения действительные данные для сохраненного поля состояния обновляются правильно. Но как только я помещаю приложение в фоновый режим (и я устанавливаю «не держать действия» в настройках разработчика), а затем снова открываю приложение, текущие данные показывают значение, как будто оно никогда не устанавливалось. Другими словами, дескриптор сохраненного состояния, кажется, забывает поле, которое я пытаюсь сохранить.
Есть мысли?