Похоже, что проблема связана с наличием в действии глобальной переменной, которая хранит ссылку на ViewModel в качестве однократного отключения.Кажется, что во всех примерах виртуальная машина используется в локальной переменной, которая не работает для меня (я не хочу, чтобы мои наблюдатели объявлялись как встроенные, так как это делает код довольно грязным 1 ).Кажется, что локальная переменная получает новый экземпляр каждый раз, когда происходит изменение конфигурации.Однако, если я создаю метод:
private fun viewModel() = ViewModelProviders.of(this).get(RandomIdViewModel::class.java)
, и я вызываю его всякий раз, когда мне нужна виртуальная машина.Я думаю, что это ошибка, которая, скорее всего, будет устранена в будущем.
1 В качестве дополнительного примечания я также должен указать, что мне также пришлось удалить своих наблюдателей, когда активностьне использовал их.Это была еще одна причина, почему я не мог просто включить определение наблюдателей, поскольку они происходят в различных событиях жизненного цикла:
override fun onResume() {
super.onResume()
viewModel().currentId.observe(this, idObserver)
}
override fun onPause() {
viewModel().currentId.removeObserver(idObserver)
super.onPause()
}