作者:mobiledu2502885323 | 来源:互联网 | 2023-07-26 10:29
我在这里找到了一个类似的问题。在撰写此问题时,只有此答案可用,这对我没有任何帮助,我相信对提出问题的人也没有任何帮助。我检查了答案中链接的repo,它通过在viewmod
我在这里找到了一个类似的问题。在撰写此问题时,只有此答案可用,这对我没有任何帮助,我相信对提出问题的人也没有任何帮助。
我检查了答案中链接的 repo,它通过在 viewmodel 中创建一个 init 方法并在 Activity/Fragment 中调用它来“解决”问题。
由于viewmodel已经被注入,这个方案对我来说似乎不太理想,我想知道在使用hilt时是否还有其他可用的选项。
回答
根据此评论和AndroidX Hilt 1.0.0-alpha03 的发布,Hilt 支持将 aSavedStateHandle
作为参数的ViewModels (与您的其他注入参数一起)。
这SavedStateHandle
会自动填充传递给片段的参数(即,您从中获取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.
}
}
在与SavedStateHandle安全参数数量集成功能要求是已经固定,将成为即将到来的导航部分2.4.0-alpha01
释放。一旦发布,您就可以执行一些操作,例如MainFragmentArgs.fromSavedStateHandle(savedStateHandle)
获取Args
当前可以从by navArgs()
ViewModel 中获取的相同类。
您应该接手编写 Android 开发人员文档!这应该在文档中提到过!谢谢!:)