Допустим, у меня есть приложение, использующее компонент архитектуры ViewModel.
Если у меня есть два действия: каталог и подробности, и что действие подробно связано с идентификатором элемента. Как мне поступить, если подробное действие воссоздается с новым идентификатором (т. Е. Через глубокое связывание).
Прямо сейчас мой viewModel создан с использованием идентификатора, привязанного к странице сведений. Однако, если этот идентификатор изменяется в методе onNewIntent, старая модель представления должна быть отброшена и заменена новой.
Это кажется противоречивым с целью модели представления, если только моя отправная точка, когда она зависит от id, неверна.
Если я переинициализирую переменную viewModel, автоматически ли удаляется старая? Мой код правильно знаю:
private lateinit var viewModel: DetailsViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(....
viewModel = ViewModelProviders.of(this, InjectorUtils.provide private lateinit var viewModel: ProvideDetailsViewModelFactory(applicationContext, detailsID!!)).get( private lateinit var viewModel: DetailsViewModel::class.java)
subscribeUi()
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
val appLinkData = intent.data
if (appLinkData != null) {
val newDetailsId = appLinkData.lastPathSegment
if (newDetailsId !== detailsID) {
detailsID = newDetailsId
//at this point my view model is not valid anymore
}
}
}