我发现了一个类似的问题 here .在撰写此问题时 there is only this answer avaliable ,这对我没有任何帮助,我也相信提出问题的人。
我检查了答案中链接的 repo,它通过在 viewmodel 中创建一个 init 方法并在 Activity/Fragment 中调用它来“解决”问题。
由于 View 模型已经被注入(inject),这个解决方案对我来说似乎并不理想,我想知道在使用 hilt 时是否还有其他可用的选项。
最佳答案
根据 this comment以及 AndroidX Hilt 1.0.0-alpha03 的发布, Hilt 支持采用 SavedStateHandle
的 ViewModel作为参数(与您的其他注入(inject)参数一起)。
这个SavedStateHandle
会自动填充传递给 fragment 的参数(即,您从 requireArguments()
获得的参数和 Safe Args 读取的相同参数),而无需您做任何事情。
因此,在 ViewModel 的构造函数中,您可以立即从 SavedStateHandle
访问这些参数。 ,而无需手动将参数传递给您的 ViewModel。
@HiltViewModel
class MainViewModel @Inject constructor(
val userDataManager: UserDataManager,
savedStateHandle: SavedStateHandle
) : ViewModel() {
init {
// Use the same argName as in your navigation graph
val yourArgument: String = savedStateHandle["argName"]
// Now use that argument to load your data, etc.
}
}
feature request for Safe Args integration with SavedStateHandle是 already fixed并将成为即将推出的导航 2.4.0-alpha01
的一部分发布。一旦发布,您就可以执行 MainFragmentArgs.fromSavedStateHandle(savedStateHandle)
之类的操作。得到相同的Args
您目前可以从 by navArgs()
获得的类(class)在您的 ViewModel 中。
关于android - 如何使用 Hilt 将安全参数参数注入(inject) View 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67350331/