首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ViewModelProviders在API19上找不到我的ViewModel类

ViewModelProviders是Android Jetpack库中的一个类,用于获取与Activity或Fragment相关联的ViewModel实例。它提供了一种方便的方式来管理和保留与UI相关的数据,以便在配置更改(如屏幕旋转)或组件重建时保持数据的一致性。

在API 19及以下的版本中,ViewModelProviders类是不可用的。这是因为ViewModelProviders是在Android Jetpack库中引入的,而Jetpack库是在Android Support库的基础上构建的,而Support库的最低版本要求是API 14。因此,如果你的应用程序的最低支持版本是API 19,你将无法直接使用ViewModelProviders类。

然而,你仍然可以手动实现ViewModel的创建和管理。你可以创建一个自定义的ViewModelProvider类,用于创建和管理ViewModel实例。以下是一个示例:

代码语言:txt
复制
public class MyViewModelProvider {

    private static MyViewModel myViewModel;

    public static MyViewModel getMyViewModel(Context context) {
        if (myViewModel == null) {
            myViewModel = new ViewModelProvider.AndroidViewModelFactory((Application) context.getApplicationContext()).create(MyViewModel.class);
        }
        return myViewModel;
    }
}

在上面的示例中,我们创建了一个名为MyViewModelProvider的自定义类,它使用AndroidViewModelFactory来创建MyViewModel实例。你可以根据自己的需求进行修改和扩展。

要使用这个自定义的ViewModelProvider类,你可以在Activity或Fragment中调用它来获取ViewModel实例,如下所示:

代码语言:txt
复制
MyViewModel myViewModel = MyViewModelProvider.getMyViewModel(this);

这样,你就可以在API 19及以下的设备上使用ViewModel类了。

需要注意的是,虽然ViewModelProviders是一种方便的方式来获取ViewModel实例,但在API 19及以下的设备上无法直接使用。因此,你需要手动实现ViewModel的创建和管理,以确保在配置更改时保持数据的一致性。

推荐的腾讯云相关产品:腾讯云移动开发平台(https://cloud.tencent.com/product/mpp)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android  JetPack~ ViewModel (一)   介绍与使用

ViewModel类有如下优点: ViewModel类是具有生命感知的能力,与和他绑定的Activity一样的生命周期,它可以解决请求网络时,Activity被突然销毁造成一些不必要的麻烦。...这个方式比较老了,在源码中也能发现,ViewModelProviders的of方法其实也是调用了ViewModelProvider,自动创建了一个factory。...create是创建一个新的实例,而get是先从HashMap中找,找不到就创建新的实例。...也是为什么重建的Viewmodel是同一个对象的原因,他会把对象放在ViewModelStore类中HashMapViewModel> mMap = new HashMap();中...:使用getActivity()获得的ViewModel 作用域在Activity里和所有他创建碎片的里,意思是你在其他Fragment也获取相同内存地址的ViewModel @Override public

71940

ViewModel 和 ViewModelProvider.Factory:ViewModel 的创建者

让我们在不使用 ViewModelProvider.Factory 的情况下,试着创建一个 ViewModel 看看: 在活动中实例化: 有没有人注意到:当我们使用 ViewModelProviders...在活动中实例化 MyViewModel 时,从未没用过 MyViewModel 的构造方法,而都是使用 ViewModelProviders 这个类中的方法。...ViewModelProviders 在内部为我们管理并调用 ViewModel 的主构造函数,创建viewmodel的实例并将该实例并返回。...那么,现在让我们看看,如果我们直接把参数传递给 MyViewModel 类的构造方法时会发生了什么: 现在,我们在活动中创建 MyViewModel 实例: 太棒了!...将你的数值传入 ViewModelProvider.Factory 实例中去 你的关注是我最大的动力!

1.8K20
  • ViewModel 源码分析

    从图可以看出来,ViewModel 与 LiveData 和 Paging 是谷歌新组件,同时它是 android.arch.lifecycle 包里面的类,可以支持 activity 和 fragment...ViewModelProviders 的 of 方法可以传入 fragment 或者是 activity,就是说你可以在fragment 或者 activity 创建 viewmodel,而这个 viewmodel...调用了 HolderFragment 的 holderFragmentFor 来创建一个 holderFragment, 添加到 activity 上(当然这个fragment 没界面),而这个 fragment...(T) viewModel; } 同理 当viewmodelproviders.of 传入fragment时,也会走上面的流程,只不过生成holderfragment的时候用getChildFragmentManager...我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?

    76210

    ViewModels 简单入门

    ViewModel 类旨在以有生命周期的方式保存和管理与UI相关的数据。 这使得数据可以在屏幕旋转等配置变化的情况下不丢失。 这篇文章是详细探索ViewModel系列文章中的第一篇。...一个简单的例子 分三步骤来设置和使用ViewModel: 通过创建一个扩展 ViewModel 类来从UI控制器中分离出你的数据 建立你的 ViewModel 和UI控制器之间的通信 在 UI 控制器中使用你的...事实上,如果你需要 Application context,最好继承 AndroidViewModel ,这是一个持有 Application 引用的 ViewModel。...结论和进一步的学习 在这篇文章中,我探索了新的ViewModel类的基础知识。关键要点是: ViewModel类旨在一个连续的生命周期中保存和管理与UI相关的数据。...ViewModel对象通常会存储LiveData对象,您可以在 这里了解更多。 ViewModelProviders.of 方法通过作为参数传入的 UI控制器与 ViewModel 进行关联。

    1.2K70

    【AAC 系列四】深入理解架构组件:ViewModel

    ViewModel 的基本使用 ViewModel 的使用也非常简单,Android 提供了一个 ViewModel 类让我们去继承,并且提供了 ViewModelProviders 来帮助我们实例化...() 方法帮我们在默认情况下构建了一个 AndroidViewModelFactory 工厂类,来帮助创建 ViewModel,并且返回了一个在当前 Activity 生命周期内的 ViewModelProvider...再仔细思考一下,get 方法会优先从这个 ViewModelStore 中去拿,那么理论上只要保证 ViewModelStore 这个类在配置变化的过程中没有被销毁,那么就可以保证我们创建的 ViewModel...,一个会持有 Application 的 ViewModel; ViewModelStore ,负责存储 ViewModel 的类,并且还负责在 ViewModel 被清除之前通知它,也即调用 ViewModel.onCleared...实际上 ViewModel 不仅可以管理数据,而且还可以存放业务逻辑处理的代码,另外还能够方便 Activity 中的不同Fragment 之间互相通信,这个解决了以往我们 Fragment 之间通信的一个大问题

    94940

    Android Jetpack 组件之 ViewModel 详解

    ViewModel 具有生命周期意识,会自动存储和管理 UI 相关的数据,即使设备配置发生变化后数据还会存在,我们就不需要在 onSaveInstanceState 保存数据,在 onCreate 中恢复数据了...就可以了,然后,在 Activity 中使用就可以了,具体如下: MViewModel mViewModel = ViewModelProviders.of(this).get(MViewModel.class...> T get(@NonNull Class modelClass) { // 获取类名称,在获取内部类名称时与 getName 有所区分 // getCanonicalName-...ViewModel 中的方法了,前面跟源码的时候会遇到各种封装类,如 ViewModelStore、ViewModelStoreOwner、AndroidViewModelFactory 等,下文中将会介绍...该类实际上使用 HashMap 存储相应的 ViewModel,非常简单: public class ViewModelStore { private final HashMap<String

    1.3K10

    Android Jetpack - ViewModel

    我觉得这个问题很重要,当我们使用任何一个新工具的时候都需要弄清楚这个问题,要结合实际情况而非盲目跟随,接下来我会逐一尝试说明 ViewModel 对比传统方案的优劣 只要你接触 Android 开发一段时间...而我们传统的处理办法就是在配置变更期间保留对象和自行处理配置变更这两种,这两种方式都有很多坑(看看官方文档就知道了),尤其是需要恢复的数据比较多的时候,而 ViewModel 就非常适合处理这些情况 在下图中...我用一个非常简单的 Demo 来展示它的基础用法,通常我们为 app 集成 ViewModel 遵循如下几个步骤: 1、创建一个继承 ViewModel 的类来分离出 UI 控制器中的数据 2、建立 ViewModel...: ViewModel(){} 以上面的计时器为例,我们需要 UI 保持持续更新时间的状态,所以在 ViewModel 添加一个 startTime 变量用于存储不断累计的时间 class MainActivityViewModel...ViewModel 可以继承 AndroidViewModel 类,AndroidViewModel 中包含 Application 的引用 class MainActivity : AppCompatActivity

    87620

    Android Architecture Components Part4:ViewModel

    ViewModel的实例,通过ViewModelProviders.of()方法传入Activity对象,它会返回一个ViewModelProvider对象,然后我们再使用它的get()来根据不同的ViewModel...这就实现了在Activity中的ViewModel持久化特性。由于ViewModel是同一个,自然它里面的数据也是同一份。 得到ViewModel后,剩下的就是对数据的操作与响应。...ViewModelProvider 到这里我想你心中可能会有如下几个疑问 ViewModel它是如何初始化的,对象是如何实例化的 如何向ViewModel中传递初始化的参数 这两个疑问都将由ViewModelProvider...,由于我们能够明确到具体的类,所以可以直接使用正常的类实例化操作。...已经有了factory,最后在获取ViewModel时传入即可 1mViewModel = ViewModelProviders.of(this, ContactsFactory.getInstance

    56720

    浅谈ViewModel

    2) 构造数据对象 自定义ViewModel类,继承ViewModel; 在自定义的ViewModel类中添加需要的数据对象; public class DemoViewModel extends ViewModel...> mMap = new HashMap(); 第二部分职责是映射,通过类名从HashMap查找ViewModel实例。...整个映射逻辑也可以简化为:通过Activity类名找ViewModel实例; 2) ViewModel的生命周期如何管理?...其实并没有那么复杂,ViewModel在第一次调用ViewModelProvider.get(ViewModel.class)创建;而销毁就需要靠HolderFragment自己的onDestroy()...范围内监听数据的变化; ViewModel:在Lifecycle范围内存储和共享数据; Room:简化Db操作; 除了Room,可以感受到官方在尽力把大家从最初的MVC往MVVM引导,更加强大的官方组件将使

    2.7K90

    感受LiveData与ViewModel结合之美

    其实一开始我没有太当回事。。。直到27.1.0以后: ? 好吧,今天的主角出现了,LiveData与ViewModel。看到这里我觉得是该了解一波了。 顺便看一下截止目前最新的v7: ?...直到关联的 Activity 或 Fragment 完全销毁时,ViewModel 才会随之消失,也就是说,即使在旋转屏幕导致 Fragment 被重新创建等事件中,视图数据依旧会被保留。...首先创建一个类,使用@LiveData注解标记你要保存的数据。注意这里的参数名称,下面会用到。...默认key值是类的规范名称,也就是包名加类名。 ? 所以一旦需要互通的Fragment类名或包名不一致,就无法数据共享。...是不是想起了 butterknife 的@BindView 与 @OnClick。 其实原理也不复杂,就是生成一个类来帮我们来获取ViewModel并实现数据的变化监听。

    88120

    Architecture Components ViewModel的控制。

    ViewModel的实现过程 给出一个最简单的创建的示例: MainActivityViewModel viewModel=ViewModelProviders.of(this).get(MainActivityViewModel.class...); 代码很好理解,获取当前类的ViewModel提供者,之后在传入需要获得的ViewModel的类型。...先看一下ViewModelProviders都做了什么? ? 如果传入的this是Fragment就先判断下是否已经关联到Activity上,没有就抛异常。...简单看一下,代码不难理解,先赋值成员变量,之后是查看ViewModelStore中是否有传入类型的ViewModel,没有的话就通过传入的工厂类创建一个新的ViewModel 添加到ViewModelStore...这样ViewModel的实现过程就差不多结束了,还是利用Fragment的方式去获取生命周期,然后再利用工厂类来创建ViewModel。

    82990

    Jetpack源码解析---ViewModel基本使用及源码解析

    截止到目前为止,JetpackNote源码分析的文章已经有四篇文章了,这一系列的文章我的初衷是想仔细研究一下Jetpack,最终使用Jetpack组件写一个Demo,上一篇已经分析了LiveData,...简单来说:ViewModel是以关联生命周期的方式来存储和管理UI相关数据的类,即使configuration发生改变(例如屏幕旋转),数据仍然可以存在不会销毁....3.2 Fragment数据共享 在ViewModelShareActivity中展示了ViewModel中的数据进行Fragment数据共享的功能。...源码分析 ViewModelProviders 在使用VM的时候一般都通过val vm = ViewModelProviders.of(this).get(DemoViewModel::class.java...但是在我这里发现跟他们的都不一样,我搜了一下ViewModelStores,发现它已经‘退役’了。 ? 并且它的注释也告诉了我们它的继承者: ? 也就是我们在of()方法中的: ?

    85020

    今天撸一波Jetpack下的Lifecycle、ViewModel和LiveData

    在LifecycleObserver类中,可以为每个事件实现回调,这样在生命周期的对象的生命周期改变的时候我们能进行相关的处理。...2.2 State 生命周期的State本质上是介于两个生命周期事件之间的一种情况。触发事件后,生命周期将进入一个状态,然后在触发另一个事件时离开该状态并进入另一个状态。如下图所示: ?...而这个方法的所代表的意思很简单,告诉要使用Lifecycle的组件,我是一个生命周期感知组件,我存在生命周期的概念。...为此,需要访问一个名为ViewModelProviders的辅助类 ,通过这样获取的ViewModel对于一个activity / fragment只有一份: MyViewModel mMyViewModel...= ViewModelProviders.of(getActivity()).get(MyViewModel .class); ViewModelProviders这个类,本质上其实是一个工厂类。

    1.6K10

    Android Jetpack架构组件(三)之ViewModel

    我的博客即将同步至 OSCHINA 社区,这是我的 OSCHINA ID:xiangzhihong,邀请大家一同入驻:https://www.oschina.net/sharing-plan/apply...在JetPack架构中,ViewModel组件是一个可以感知生命周期的形式来存储和管理视图相关的数据的组件,因此它适合以下场景。 适合需要保存大量数据的场景。...MyViewModel类,创建ViewModel类千万不能持有Context的引用,否则会引起内存泄漏,如果需要使用Context可以继承AndroidViewModel。...5.2 ViewModelProvider 在前面的示例代码中,我们在Activity中使用ViewModelProviders.of方法来获取ViewModel实例,如下所示。...MyViewModel model = new ViewModelProvider(this).get(MyViewModel.class); 打开ViewModelProviders类的源码,可以发现

    1.4K00
    领券