我正在使用
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
更改时创建一个新实例,而不是返回之前已创建的虚拟机。
我该怎么做?