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

使用Android ViewModel跨Fragment共享数据遇报错:Cannot resolve method of(android.app.Activity)

解决ViewModelProviders.of()无法解析方法的问题

嘿,这个问题我之前也碰到过!原因是你用的ViewModelProviders类已经被Android官方废弃了——从AndroidX Lifecycle 2.2.0版本开始,官方就推荐直接用ViewModelProvider类来获取ViewModel实例,所以旧的写法才会报“无法解析方法”的错误。下面给你一步步讲怎么解决:

1. 先确认依赖版本正确

首先检查你的Module级别build.gradle(或者build.gradle.kts)里,有没有引入正确的AndroidX Lifecycle依赖,版本至少要2.2.0以上,建议用最新稳定版:

dependencies {
    def lifecycle_version = "2.6.2"
    // Java项目用这个
    implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
    // Kotlin项目推荐用ktx版本,更简洁
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
    // 可选:如果需要用到生命周期观察,再加这个
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
}

2. 替换旧代码为新写法

把你原来的代码:

ViewModelProviders.of(getActivity()).get(SharedViewModel.class);

直接替换成:

new ViewModelProvider(requireActivity()).get(SharedViewModel.class);

要是你用的是Kotlin,写法会更简洁:

ViewModelProvider(requireActivity())[SharedViewModel::class.java]

3. 几个关键注意点

  • 一定要用requireActivity()代替getActivity():getActivity()有可能返回null,而requireActivity()会确保拿到非空的Activity实例,能避免潜在的空指针问题。
  • 两个Fragment都要通过同一个Activity的ViewModelProvider获取SharedViewModel:这样两个Fragment拿到的才是同一个ViewModel实例,才能实现数据共享的目的。

额外小科普

官方废弃ViewModelProviders是为了简化API——原来的of()方法其实就是帮你创建ViewModelProvider实例,现在直接暴露构造方法,代码逻辑更直观,也减少了一层封装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:50:00