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

在Fragment中初始化FeedViewModel时ViewModelProviders.of()报错

问题解决:ViewModelProviders.of(this)在Fragment中参数不匹配报错

可能原因及解决方案

1. 检查Fragment的继承类型

ViewModelProviders的of()方法仅支持AndroidX的Fragment(androidx.fragment.app.Fragment)或support库的Fragment(android.support.v4.app.Fragment),不支持旧版的android.app.Fragment。

  • 确认你的Fragment类继承的是androidx.fragment.app.Fragment:
class YourFeedFragment : androidx.fragment.app.Fragment() {
    // ...
}

2. 统一依赖包的导入

确保ViewModel相关的导入包和Fragment的依赖体系一致:

  • 如果用AndroidX,导入:
import androidx.lifecycle.ViewModelProviders
// 或者更推荐的ViewModelProvider(ViewModelProviders已废弃)
import androidx.lifecycle.ViewModelProvider
  • 避免同时混用AndroidX和旧的arch组件包(比如android.arch.lifecycle.ViewModelProviders和AndroidX Fragment)。

3. 使用推荐的ViewModel初始化方式(替代ViewModelProviders)

ViewModelProviders已被官方废弃,建议直接使用ViewModelProvider:
修改你的初始化代码为:

private lateinit var viewModel : FeedViewModel

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    
    viewModel = ViewModelProvider(this).get(FeedViewModel::class.java)
    // viewModel.refreshData()
}

4. 验证Gradle依赖配置

确保你的build.gradle(Module级别)中添加了正确的AndroidX Lifecycle依赖:

dependencies {
    // ViewModel和LiveData
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2"
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.2"
    // Fragment KTX(配合AndroidX Fragment使用)
    implementation "androidx.fragment:fragment-ktx:1.6.1"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:45:37