You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ViewModelProvider Factory向ViewModel传递Application上下文

解决方案

你当前的报错原因是修改后的SettingsViewModel构造要求传入Application实例,但原来的Factory类创建实例时没有传递该参数,按以下两步修改即可:

  1. 调整SettingsViewModelProviderFactory,增加Application构造参数,创建ViewModel时传入该实例
class SettingsViewModelProviderFactory(val application: Application) : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(SettingsViewModel::class.java)) {
            @Suppress("UNCHECKED_CAST")
            return SettingsViewModel(application) as T
        }
        throw IllegalArgumentException("未知的ViewModel类型")
    }
}
  1. 修改LoginActivity中Factory的实例化代码,传入当前应用的Application实例
val viewModelProviderFactory = SettingsViewModelProviderFactory(application)

可选优化方案

如果你引入了androidx.activity:activity-ktx依赖,可以完全删掉自定义的Factory类,直接在Activity中用KTX扩展初始化ViewModel,系统会自动处理AndroidViewModel的Application参数注入:

// 在LoginActivity的类作用域直接声明即可,不需要在onCreate里手动初始化
val viewModel: SettingsViewModel by viewModels()

内容的提问来源于stack exchange,提问作者Ibanez1408

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:45:03