首页
学习
活动
专区
工具
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)

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

相关·内容

ViewModel 和 ViewModelProvider.Factory:ViewModel 创建者

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

1.6K20

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

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

59840

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?

74410

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.1K70

【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 之间通信一个大问题

89040

ViewModel浅析

先写一个demo:通过ViewMOdel实现fragment之间通信 布局: 【activity_main】 <?xml version="1.0" encoding="utf-8"?...因为很多通信其实都是通过底层存储来实现 ViewModel大部分都用来实现MVVM模型,M层用来操作数据,V层负责展示界面,VM层用来逻辑处理。...,底层用是HashMap,这时我们就可以知道了,ViewModel就是根据activity名字存取Map public class ViewModelStore { private final...vm : mMap.values()) { vm.clear(); } mMap.clear(); } } 这里有put有get,一开始ViewModelProviders.of...ViewModel基本都会跟LiveData结合使用,LiveData里面有个ObserverWrapper,监听就是通过它实现 其实代码功能底层基本都是通过存储来实现,无论是线程间通信还是进程间通信

46110

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.2K10

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

55220

浅谈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()...范围内监听数据变化; ViewModelLifecycle范围内存储和共享数据; Room:简化Db操作; 除了Room,可以感受到官方尽力把大家从最初MVC往MVVM引导,更加强大官方组件将使

2.7K90

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

84020

Android-ViewModel和LiveData使用详解

ViewModel设计目的是以一种关注生命周期方式存储和管理与UI相关数据。...直到当前Activity被系统销毁时,Framework会调用ViewModelonCleared()方法,我们可以onCleared()方法中做一些资源清理操作。...LiveData是一个可观察数据持有者。与常见观察者不同,LiveData是有生命周期感知。这意味着它尊重其他应用程序组件生命周期,比如Activity、Fragment或Service。...* 定义ViewModel和创建LiveData * ViewModel是以关联生命周期方式来存储和管理UI相关数据,即使configuration发生改变(比如旋转屏幕),数据仍然可以存在不会销毁...ViewModel * * LiveData是一个可观察数据持有者 * ViewModel 与 LiveData相互配合使用 */ public class DomeModel extends

3.5K30

感受LiveData与ViewModel结合之美

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

85620

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

79790

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()方法中: ?

83320

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

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

1.5K10
领券