Передать параметры из фрагмента в ViewModel Kotlin - PullRequest
0 голосов
/ 04 мая 2020

Я использую SavedStateHandle для передачи данных между различными компонентами. Мой фрагмент использует SavedStateViewModelFactory для инициализации моей виртуальной машины (это правильная инициализация?) И метод в объекте-компаньоне для обновления saveState.

Мои зависимости:

implementation "androidx.activity:activity-ktx:1.1.0"
implementation "androidx.fragment:fragment-ktx:1.2.4"
implementation 'androidx.navigation:navigation-fragment-ktx:2.2.2'
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0"

Инициализация ViewModel во фрагменте:

private val viewModel: MyViewModel by viewModels {
        SavedStateViewModelFactory(activity?.applicationContext as Application, this)
}

Это хороший способ инициализации ViewModel?

Когда я хочу обновить свои сохраненные значения, я использую этот метод:

companion object {

    @JvmStatic
    fun newInstance(cod: String, password: String) =
        MyFragment().apply {
            arguments = Bundle().apply {
                putString(ARG_COD, cod)
                putString(ARG_PASSWORD, password)
            }
        }
}

После вызова newInstance (который должен обновить сохраненное состояние), я запускаю метод printCod в моей ViewModel. Это виртуальная машина:

class MyViewModel(
    private val state: SavedStateHandle
    ) : ViewModel(){

    fun getCurrentCod(): String {
        return state.get(ARG_COD)?: ""
    }

    fun printCod() {
        println(getCurrentCod())
    }

    companion object {
        private val ARG_COD = "cod"
        private val ARG_PASSWORD = "password"
    }
}

Мой "главный" (где выполняется код выше):

newInstance(userCode, userPass)
viewModel.printCod()

Я потратил два дня, чтобы понять, почему printCod всегда печатать пустая строка. кто-нибудь знает, как помочь мне, дав мне совет или хотя бы сказать, где я не прав?

...