如何使用输入参数创建视图模型的实例

问题描述 投票:0回答:1

我有以下视图模型,它采用上下文输入参数。

class MyViewModel(val context: Context): ViewModel() {

}

当我的应用程序尝试创建此视图模型的实例时,我收到一条错误消息,指出无法创建实例。 这显然是因为我没有给它输入上下文参数,但我该如何做到这一点?

val myViewModel: MyViewModel = viewModel()
android-jetpack-compose viewmodel android-viewmodel
1个回答
0
投票

免责声明:

请注意,强烈建议不要在 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'

输出:

Screenshot

© www.soinside.com 2019 - 2024. All rights reserved.