При использовании этого кода для получения данных об устройствах он работает хорошо. Но при любом изменении конфигурации (изменении ориентации) загрузка начинается снова вместо доставки уже загруженных данных.
class DevicesViewModel(app: Application) : AndroidViewModel(app) {
val data = DevicesLiveData()
inner class DevicesLiveData : LiveData<List<Device>>() {
init {
SpecsUtils.devicesListLimit { value = it }
}
}
}
Я делаю что-то неправильно? Я следил за учебником по Medium.
Насколько я помню, ViewModel и LiveData предназначены для сохранения изменений конфигурации и событий жизненного цикла, поэтому данные следует загружать только один раз.
Редактировать
Я приобретаю ViewModel вот так
ViewModelProviders.of(this).get<DevicesViewModel>().data.observe(this, Observer {
adapter.devices = it
})
@ConstOrVar добавлен
Это выглядит странно. Не вижу ошибок в вашем коде - выживание модели представления во время изменения конфигурации должно работать.
Мне нужно было бы посмотреть немного глубже в ваш код, но ваш код, вероятно, не работает, потому что вы передаете this, и вы должны передать this.activity в ViewModelProvider, например:
myviewModel = ViewModelProvider.of(this.activity).get(MyViewModel::class.java)
myviewmodel.data({this.lifecycle}, { data -> Log.d("NEWDATA", data) }
Предполагая, что data является объектом LiveData.
Это должно быть сделано для каждого ViewModelProvider, где вы хотите обмениваться данными, например, если вы обмениваетесь данными между двумя разными фрагментами, которые привязаны к одному и тому же действию, тогда вы должны вызвать ViewModelProvider.of(this.activity) для обоих из них.
Можете ли вы поделиться кодом, в котором вы получили
DevicesViewModelи использовать его?