在 Android 中,可以使用 viewModels()
函数在 ViewModel 中使用可注入的构造函数。以下是一个解决方法的代码示例:
首先,在 build.gradle 文件中添加以下依赖项:
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
然后,创建一个带有可注入构造函数的 ViewModel 类。例如,假设我们有一个需要 Repository
对象的 ViewModel:
class MyViewModel(private val repository: Repository) : ViewModel() {
// ViewModel 的其他代码
}
接下来,在 Activity 或 Fragment 中使用 viewModels()
函数来实例化 ViewModel,并传入所需的参数。例如,在 Fragment 中:
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModels {
// 通过 lambda 表达式提供 ViewModelProvider.Factory
ViewModelFactory((activity?.application as MyApplication).repository)
}
// Fragment 的其他代码
}
在上述示例中,我们使用 viewModels()
函数来实例化 ViewModel,并通过 lambda 表达式提供了一个自定义的 ViewModelProvider.Factory
。在 lambda 表达式中,我们使用 (activity?.application as MyApplication).repository
作为 ViewModel
的构造函数参数。这里的 MyApplication
是你的应用程序类,repository
是一个可注入的对象。
最后,需要创建一个自定义的 ViewModelProvider.Factory
来提供 ViewModel 的实例。例如:
class ViewModelFactory(private val repository: Repository) : ViewModelProvider.Factory {
override fun create(modelClass: Class): T {
if (modelClass.isAssignableFrom(MyViewModel::class.java)) {
return MyViewModel(repository) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
在上述示例中,我们实现了 ViewModelProvider.Factory
接口,并重写了 create()
方法以提供 ViewModel 的实例。
这样,你就可以在 ViewModel 中使用可注入的构造函数了。