Хорошо, я добавил ваш код в ViewModel в один из моих рабочих проектов.
lateinit var car: String
fun init(car: String) {
this.car = car
}
И называется:
viewModel.init("car")
Log.d("CAR_DEBUG",viewModel.car)
И получил в моей консоли ожидаемый вывод: D / CAR_DEBUG: car . Так что это работает, но ошибки могут появляться в зависимости от вашей реализации.
Кроме того, это неправильный способ сделать это, я бы предложил использовать шаблон наблюдателя MutableLiveData, чтобы убедиться, что любое непредвиденное поведение не произойдет из-за поворота экрана или восстановления активности / фрагмента. Имея это в виду, измените ваш код на это:
var carObservable: MutableLiveData<String> = MutableLiveData()
fun init(car: String) {
carObservable.value = car
}
А в Деятельности / Фрагмент:
viewModel.carObservable.observe(this, Observer {
Log.d("CAR_DEBUG",it)
})
// doesnt matter where your viewModel.init this will still work
viewModel.init("car")
Таким образом, даже если вы вызываете функцию init после вызова наблюдения, вы уверены, что получите уведомление только при изменении значения. На самом деле это рекомендуемый способ использования ViewModels (реактивный путь через шаблон наблюдателя). И, делая это, вы убедитесь, что даже если вы поворачиваете экран или воссоздаете Activity / Fragment, переменная вашего автомобиля будет доступна.