Использование Android ViewModel не работает должным образом - PullRequest
0 голосов
/ 10 декабря 2018

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

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
})

1 Ответ

0 голосов
/ 05 января 2019

Мне нужно увидеть немного глубже в вашем коде, но ваш код, вероятно, не работает, потому что вы передаете 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) для обоих из них

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...