我有以下视图模型,它采用上下文输入参数。
class MyViewModel(val context: Context): ViewModel() {
}
当我的应用程序尝试创建此视图模型的实例时,我收到一条错误消息,指出无法创建实例。 这显然是因为我没有给它输入上下文参数,但我该如何做到这一点?
val myViewModel: MyViewModel = viewModel()
免责声明:
请注意,强烈建议不要在 ViewModel 中使用
Context
。
答案:
AndroidViewModel
。它基本上是一个 ViewModel,保存对 Application
的引用,因此也保存对 Context
的引用。您可以按如下方式声明:
class MyViewModel(application: Application) : AndroidViewModel(application) {
val someString by mutableStateOf("HELLO")
// below function needs a Context to fetch a String resource
fun getResourceString(): String {
return getApplication<Application>().getString(R.string.world)
}
}
然后,在您的可组合项中,您可以像这样调用它:
import androidx.lifecycle.viewmodel.compose.viewModel
@Composable
fun AndroidViewModelSample(myViewModel: MyViewModel = viewModel()) {
Column {
Text(text = myViewModel.someString)
Text(text = myViewModel.getResourceString())
}
}
确保您已将所需的依赖项添加到您的
build.gradle
文件中:
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1'
输出: