Я использую 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 всегда печатать пустая строка. кто-нибудь знает, как помочь мне, дав мне совет или хотя бы сказать, где я не прав?