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

Android Architecture Components Part4:ViewModel

,它是对抽象ViewModel的扩展,使用它时需要传入Application对象,方便一些资源的获取。...ViewModel的实例,通过ViewModelProviders.of()方法传入Activity对象,它会返回一个ViewModelProvider对象,然后我们再使用它的get()来根据不同的ViewModel...的Class对象来获取到相应的ViewModel实例。...ViewModelProvider 到这里我想你心中可能会有如下几个疑问 ViewModel它是如何初始化的,对象是如何实例化的 如何向ViewModel中传递初始化的参数 这两个疑问都将由ViewModelProvider...所以如果我们要再传入其它自定义的初始化参数,只需实现我们自己的create()方法。要自定义create()方法,我们就要自定义一个factory,继承NewInstanceFactory类。

56720
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android Jetpack 组件之 ViewModel 详解

    ViewModel生命周期 ViewModel的源码分析 什么是ViewModelStore 什么是ViewModelStoreOwner 如何简化Fragment之间的通信 ViewModel 的生命周期...如下: /** * 如果需要使用Context可以选择继承 AndroidViewModel */ public class MViewModel extends ViewModel {...AndroidViewModelFactory,也可以自定义 Factory,直接调用上面任意一个方法创建 ViewModelProvider 即可。...} 此时,ViewModel 就创建好了,那 VIewModel 是如何被创建的呢,mFactory 的具体实现这里是默认的 AndroidViewModelFactory,其创建时通过反射获取构造方法创建的...如何简化 Fragment 之间的通信 Fragment 之间的通信以前是使用接口通过宿主 Activity 转发来实现的,现在可以使用同一 ViewModel 完成两个 Fragment 之间的通信,

    1.3K10

    【Jetpack】ViewModel 架构组件 ( 视图 View 和 数据模型 Model | ViewModel 作用 | ViewModel 生命周期 | 代码示例 | 使用注意事项 )

    、Activity 组件 3、UI 布局文件 4、运行效果 五、ViewModel 生命周期 六、ViewModel 使用注意事项 一、Activity 遇到的问题 ---- Activity 遇到的问题...以及 数据模型 Model 销毁 ; Activity 中的组件 获取数据时 , 不直接从 数据模型 Model 中获取 , 而是 从 ViewModel 架构组件中获取 ; ViewModel 作用...Activity 组件 在 Activity 中 , 要 绑定 ViewModel 组件 , 通过 ViewModelProvider 获取 MyViewModel::class.java 类 对应的...textView = findViewById(R.id.textView) // 获取 ViewModel myViewModel = ViewModelProvider...关联的所有的 Activity 或 Fragment 全部销毁 , 则 ViewModel 实例对象 也会被销毁 ; 六、ViewModel 使用注意事项 ---- ViewModel 使用注意事项

    87120

    Jetpack系列——ViewModel

    对于Android传统的代码编写方式,一般地,将页面UI的处理,数据的加载,全部放在Activity或Fragment中进行,但这并不满足“单一功能原则”,也不易于维护和扩展。...层,M层负责数据的处理,View层负责UI的展示,不同的地方在于如何将M层与V层进行结合。...[1240] 上述代码中也介绍了最重要的一个点,那就是ViewModel实例的创建,首先需要创建一个ViewModelProvider类对象,其构造方法中需要传入Activity实例,在androidx...但如果ViewModel中必须要用到Context怎么办呢,可以将ViewModel类继承自AndroidViewModel,AndroidViewModel继承自ViewModel,并且接收Applcation...ViewModel不会受Actvity生命周期的影响,那是不是可以使用ViewModel替代onSaveInstanceState()方法呢?

    64110

    ViewModel

    一.视图和数据模型之间的桥梁ViewModel   在页面(Activity/Fragment)功能较为简单的情况下,通常会把UI交互,与数据获取等相关的业务逻辑全部写在页面中。...如果数据不进行存储,则通常还要去重新获取一次数据。幸运的是,ViewModel可以为我们解决这个问题。...ViewModel的实例化过程是通过ViewModelProvider来完成的,ViewModelProvider会判断ViewModel是否存在,若存在的话直接返回,否则他会创建一个ViewModel...四.ViewModel和AndroidViewModel   前面提到,ViewModel是独立于配置变化的,它的生命周期比页面长,所以需要注意的一点是:不要向ViewModel传入任何类型的Context...如果一定要这样做,可以使用AndroidViewModel类,它继承自ViewModel,并接收Application作为Context。

    24130

    Jetpack--LifeCycle、ViewModel、LiveData

    9/10. */ class NumberViewModel extends ViewModel { public int number; } 在Activity中使用ViewModelProvider...中使用Context,不要手动传入,而是继承至AndroidViewModel package com.aruba.viewmodel; import android.app.Application;...还具有异步调用不会造成内存泄漏的优点,需要结合LiveData使用,ViewModel的生命周期是独立于Activity的 三、LiveData LiveData对象提供了可观测方法,当数据发送改变时...ViewModel,并观测LiveData的值,ui线程中使用setValue方法设置LiveData的值,非ui线程使用postValue方法 package com.aruba.livedata;...进度值的观察,注意这边获取ViewModel时Owner要用Activity的上下文,因为实现联动需要使用同一个ViewModel,不同Owner会生成不同的实例 package com.aruba.livedata2

    1.7K20

    使用 Architecture Component 实现 MVVM 的正确姿势

    思考一下如果用常规的做法如何实现:加 Callback?还是使用 EventBus?...ViewModel 传递参数,这里分场景看一下: 在 Fragment 或者 Activity 中使用 ViewModel 注意事项 通过 ViewModelProvider 获取 ViewModel...UI 相关的数据,从 Repo 获取的数据(可能需要)经过一些处理再提供给 View,这个处理的过程应该放在 ViewModel 中(可以使用 Transforms) View 层不应该有过多的逻辑代码...中不能持有 View,一方面防止内存泄漏,另一方变这种设计有益于写单测;如果需要在 ViewModel 中使用 Context,可以使用 AndroidViewModel 传递给 LiveData 的...LiveData 非粘性消息的探索和尝试 自定义生命周期以及实现生命周期感知能力

    78820

    kotlin--Flow文件下载

    学习了kotlin后,我们将它运用到实际开发中,结合Flow实现文件下载 最终效果: 项目使用了Navigation框架:Activity+Fragment的方式 导入依赖: implementation...、Navigation Graph的连接等操作就不介绍了 1.首先实现下载工具类,包含状态和下载实现 使用密封类定义状态: package com.aruba.flowapplyapplication.download...file.delete() emit(DownloadStatus.Err(it)) }.flowOn(Dispatchers.IO) } } 为InputStream添加扩展函数...使用LiveData定义进度属性,并实现下载按钮的点击事件,由于Flow的collect函数为挂起函数,需要使用协程作用域,我们直接使用viewModelScope: package com.aruba.flowapplyapplication.viewmodel...java.io.File /** * Created by aruba on 2021/9/19. */ class DownloadViewModel(val context: Application) : AndroidViewModel

    82010

    【Jetpack】Room + ViewModel + LiveData 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

    , 每当数据库中的数据发生变化时 , 就需要开启线程 , 重新获取数据库中的数据 ; 为了优化上述问题 , 可以引入 LiveData 和 ViewModel , ViewModel 是 视图 View...与 数据模型 Model 之间 数据交互的 桥梁 ; LiveData 是基于 ViewModel 的 , 是 对 ViewModel 数据维护的一个补充 ; 在 ViewModel 中使用了 LiveData...Repository 进行交互 ; ViewModel 与 Room 结合使用 , 实际上与 Repository 进行交互 ; ViewModel 需要继承 AndroidViewModel , 并且需要在类中维护...使用要点 在 Activity 组件中 , 通过调用 ViewModel 视图模型获取 数据库中的数据 , ViewModel 调用 Repository 层的增删改查方法 , Repository...调用 Room 框架的相关方法操作 SQLite 数据库 ; 首先 , 获取 ViewModel 视图模型 ; // 获取 ViewModel 视图模型对象 var viewModel

    1K20
    领券