假设我有一个使用ViewModel Architecture Component的应用程序。 如果我有两个活动:商品目录和详细信息,并且该详细信息活动与商品ID相关联。如果使用新ID(即通过深层链接)重新创建了明细活动,该怎么办?
现在,我的viewModel是使用绑定到详细信息页面的ID创建的。但是,如果onNewIntent方法中的id更改,则应丢弃旧的视图模型,并用新的视图模型替换。
这似乎与视图模型的目的矛盾,除非我将其依赖于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
}
}
}