Android:如何使用 viewModel 函数强制创建新的 VM?

问题描述 投票:0回答:1

我正在使用

viewModel
可组合函数为我提供一个要使用的视图模型实例,但我想知道如何强制框架在需要时“重新创建”视图模型。

我知道这个

viewModel
函数的行为与 ViewModelProviders 类似,它在第一次调用时创建视图模型的实例,然后返回相同的实例(如果它已存在于内存中)。这允许在同一活动内的不同片段之间共享视图模型的同一实例,等等。

我为此方法提供了一个工厂,因为我的视图模型在其构造函数中有参数。我一直不太明白的是,当参数更改时,我如何知道将创建一个新实例?例如,我有一个位于活动级别的视图模型,因此每当调用该函数时,都会返回相同的实例。登录用户 ID 位于 VM 构造函数的参数中。如果登录的用户发生变化,我需要重新创建视图模型。我如何才能相信

viewModel
函数能够理解这一点并为我提供一个仅返回已存在实例的新实例?

示例:

composable("MyRoute") {
  val vm: UserViewModel = viewModel(
      viewModelStoreOwner = LocalContext.current as AppCompatActivity,
      factory = UserViewModelFactory(userId = loggedInUserId))
  MyView(viewModel = vm)
 }

本质上,我需要的是强制

viewModel
函数再次使用工厂,并在每次
loggedInUserId
更改时创建一个新实例,而不是返回之前已创建的虚拟机。

我该怎么做?

android kotlin mvvm android-jetpack-compose android-viewmodel
1个回答
0
投票

viewModel()
函数有一个
key
参数。每当
key
发生变化时,都会创建一个新的 ViewModel 实例,因此您可以使用
loggedInUserId
作为键。

© www.soinside.com 2019 - 2024. All rights reserved.