我有一个活动。此活动正在接收一些参数。目前,我可以viewModel
使用这些参数通过辅助注入创建一个。
//activity code
private val viewModel: ViewModel by viewModels {
val keyName = intent.extras?.getString(KEY_NAME).orEmpty()
ViewModel.provideFactory(keyName)
}
现在,我有一个navHostFragment
导航图中的所有片段都将使用我之前在活动中创建的视图模型。但我找不到分享该 viewModel 的方法
我已经知道我们可以用来activityViewModels
与活动共享 viewModel
//fragment code
private val sharedViewModel: ViewModel by activityViewModels()
但是我sharedViewModel
没有没有辅助参数的构造函数(并且在运行时失败)。
目前,我有两个解决方案
第一个选项:在每个片段中“创建”一个新的 viewModel,并使用 activityViewModels 从活动(或 navArgs)接收参数以共享相同的实例(我不喜欢这种方法,但可以)
private val viewModel: ViewModel by activityViewModels {
val keyName = navArgs.keyName
ViewModel.provideFactory(keyName)
}
第二个选项:从构造函数中删除辅助参数并在 viewModel 中创建一个方法来设置我需要的信息:
@HiltViewModel
class ViewModel @Inject constructor(
private val repository,
.....
) : ViewModel() {
fun setKeyName(keyName: String)....
所以,我的问题是......有没有办法在活动中创建一个带有辅助参数的视图模型,并与片段共享该视图模型?