Модуль SavedState Android Kotlin с View Model - значение не сохраняется - PullRequest
0 голосов
/ 17 января 2020

Я следовал инструкциям в 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)
                }

        }
        }

При использовании приложения действительные данные для сохраненного поля состояния обновляются правильно. Но как только я помещаю приложение в фоновый режим (и я устанавливаю «не держать действия» в настройках разработчика), а затем снова открываю приложение, текущие данные показывают значение, как будто оно никогда не устанавливалось. Другими словами, дескриптор сохраненного состояния, кажется, забывает поле, которое я пытаюсь сохранить.

Есть мысли?

1 Ответ

1 голос
/ 26 марта 2020

У меня была такая же проблема. Это было решено тем, что я перестал запрашивать сохраненные значения из SavedStateHandle в методе onRestoreInstanceState. Этот вызов правильно используется в методе onCreate.

...