在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
相关产品推荐
相关产品推荐

