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

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

一、ViewModel + LiveData + DataBinding 核心要点 1、ViewModel 使用要点 ViewModel 架构组件 是 视图 View 与 数据模型 Model 之间 数据交互的...使用要点 : 首先 , 创建 自定义 ViewModel 视图模型 类 , 继承 androidx.lifecycle.ViewModel 类 , 该类就是 要设置到 视图 中的 数据模型 ; 与...DataBinding 结合使用时 , 在 DataBinding 布局中设置的就是该 视图模型 类对象 ; 该 ViewModel 类中 , 还 使用LiveData , 可以实时监听数据改变..., 可以将 运行过程中 ViewModel 中的 Model 模型数据改变 通知 视图 View , 令视图组件显示最新的数据内容 ; 在 ViewModel 中使用LiveData 后 , 必须调用...(viewmodel.number)}" 为 Button 组件设置点击事件 , 如果要 调用配置的 ViewModel 对象的函数 , 需要使用 ()->对象.函数() 的形式进行调用 , 如下示例

1.3K20

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

, 每当数据库中的数据发生变化时 , 就需要开启线程 , 重新获取数据库中的数据 ; 为了优化上述问题 , 可以引入 LiveData ViewModel , ViewModel 是 视图 View... 更新视图 操作 ; 2、Google 官方建议的 Room + ViewModel + LiveData 架构 下图是 Google 官方 提出的 Room + ViewModel + LiveData...视图模型层 : 该层 不与 Room Retrofit 直接交互 , 而是与 Repository 层 进行交互 ; 在 ViewModel 层引入 LiveData 监听数据变化 , 如果数据发生变化则在...LiveData 设置的 androidx.lifecycle.Observer 监听器回调中 更新 View 视图 ; View 视图层 : Activity / Fragment 负责视图显示的...框架的相关方法操作 SQLite 数据库 ; 首先 , 获取 ViewModel 视图模型 ; // 获取 ViewModel 视图模型对象 var viewModel

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

【Jetpack】LiveData 架构组件 ( LiveData 简介 | LiveData 使用方法 | ViewModel + LiveData 示例 )

一、LiveData 简介 ---- 在 视图 View 与 数据模型 Model 通过 ViewModel 架构组件 进行绑定后 , 可以立即 将 ViewModel 中的数据设置到 UI 界面中...通知 UI 来进行 视图 View 的更新 操作呢 ?...这里引入 LiveData 架构组件 , 在 ViewModel 中 , 可以 通过 LiveData 将数据修改的信息发送给 视图 View , 通知 UI 界面进行修改 ; 场景举例 : 在 ViewModel...视图 View ; 二、LiveData 使用方法 ---- 首先 , 在 ViewModel 视图模型 中定义 LiveData 数据 , 如 MutableLiveData , class MyViewModel...; 使用 传统的开发方式 , 可以使用 线程通信 , Handler 或者 广播 等形式 , 在子线程中通知主线程更新 UI ; 使用 LiveData 后 , 将数据定义在 LiveData 中 ,

1.2K20

Android面试题之Kotlin Jetpack的三大核心组件

ViewModel LiveData 是 Android Jetpack 组件库中的两个核心组件,它们能帮助开发者更有效地管理 UI 相关的数据,并且能够在配置变更(如屏幕旋转)保存恢复 UI...ViewModel作用 瞬态数据丢失的恢复,比如横竖屏 异步调用的内存泄漏 处理类膨胀提高维护难度测试难度 使视图和数据能够分离 是介于视图View和数据Model之间的桥梁 LiveData的作用...用于ViewModel数据返回通知View更新,是ViewModelView之间的桥梁 那么如何在 Kotlin 中正确优雅地使用 ViewModel LiveData 呢。...平时像上面例子中和LiveData、ViewModel一起使用的比较多 总结 通过 ViewModel 、 LiveData,可以实现数据的生命周期感知,并且在配置变更(如设备旋转)也能保持 UI...同时结合Lifecycle,通过结构简化生命周期管理,使得生命周期感知组件在 Android 开发中更为高效,也有助于减少潜在的内存泄漏其他生命周期相关的问题。

4810

Now in Android #15 —— 最新 Android 知识分享

开发者无需搭建高负载的 ARM 环境即可执行 ARM 二进制文件并进行测试。 IME 动画 Sample App 上一期中有介绍过 IME 动画,通过监听 IME 动画可以让开发者平滑的调整视图内容。...v=EPcpKzAGZuI&list=PLNUr_cTShrWZNKJlnurh5MB1wkSEU2nlw&index=3&t=0s LiveData ViewModel 的使用 https://www.youtube.com...v=ZTDXo0-SKuU&feature=youtu.be 主要介绍了什么是协程以及协程解决了什么问题,还有协程的取消测试。...大家肯定都了解了如何在 ViewModel/LiveData/Lifecycle 中正确的使用协程,使得在恰当的情况下可以取消协程,比如用户离开当前页面。...在 4.0 中,支持视图的 3D 展示,视图实时更新,直接跳转到视图声明处。我也写了一篇文章进行介绍: Layout Inspector 支持 3D 视图了!

94430

Android Jetpack架构组件(一)与AndroidX

虽然Android官方没有推出开发标准,但是一些技术社区出于更高效的进行协同开发,逐渐引入了MVPMVVM等应用开发架构,使用这些框架开发出来的应用,无论从项目质量还是代码的可读性可维护性来说,都更加出色...),它包括了LifeCycle、LiveData、ViewModel、Room等组件,而在Goole I/O 2018大会上谷歌使用AndroidX替代了Android Support Library,...例如,Activity Fragment 仅依赖于视图模型ViewModwl。存储区是唯一依赖于其他多个类的类,在本例中存储区依赖于持久性数据模型远程后端数据源。...Android KTX:优化了供Kotlin使用的JetpackAndroid平台API,帮助开发者以更简洁、更愉悦、更惯用的方式使用Kotlin进行Android开发。...AppCompat:帮助较低版本的Android系统进行兼容。 Auto: 开发Android Auto应用的组件,提供了适用于所有车辆的标准界面用户交互。

1.9K00

Android Dev Summit 21 精彩内容盘点

Android12 遵循了 M3 的 Dynamic Color 设计原则,系统可以从用户的壁纸中抓取颜色,然后色阶应用到你开发的应用中,应用跟随主题的不同变换颜色,千人千面。...Android11 起提供了兼容性测试工具,在不重新编译 APK 的情况下可以针对变动的 API 进行测试、提高测试效率。...12L 针对大屏设备折叠屏对界面进行了优化,例如当屏幕宽度大于 600dp 将默认显示两列内容、引入了类似 Chrome OS 的 Dock 栏等,同时支持拖拽分屏等功能,同时在不同窗口中启动多个应用...你可以只在 Model 层使用 Flow,在 View 层仍然使用 LiveData,通过 Flow.asLiveData 将 Flow 转换为 LiveData: // import androidx.lifecycle.asLiveData...此外,Android Studio 对模拟进行了不少强化,模拟模拟更多真实设备的使用场景,例如重力感应等。

1.7K20

生命周期感知 Lifecycle

:lifecycle-reactivestreams-ktx:$lifecycle_version" // 可选 LiveData测试 testImplementation "androidx.arch.core...让 ViewModel 去获取数据,数据更改通过 LiveData 响应到视图。...使用数据绑定库维护视图 UI 控制器的整洁。这让视图更具声明性,并减少在 UI 控制器的更新代码。如果你倾向于使用 Java ,可以使用 Butter Knife 减少重复代码。...使用生命周期感知组件在应用可见启用细粒度的位置更新,在应用处于后台切换到粗粒度的更新。 停止开启视频缓冲。 使用支持生命周期的组件尽快开始视频缓冲,但是将播放推迟到应用程序完全启动。...还可以使用可识别生命周期的组件在应用程序销毁终止缓冲。 启动停止网络连接。 使用可感知生命周期的组件可以在应用程序处于前台状态实时更新(流式传输)网络数据,并在应用程序进入后台自动暂停。

1.2K20

Android 面试题:为什么 Activity 都重建了 ViewModel 还存在?—— Jetpack 系列(3)

:数据驱动型界面控制器(本文)[2] 4、Flow:LiveData 的替代方案[3] 5、从 MVC 到 MVP、MVVM、MVI:Android UI 架构演进[4] 6、ViewBinding:新一代视图绑定方案...[5] 7、Fragment:模块的微型 Activity[6] 8、RecyclerView:可复用型列表视图 9、Navigation:单 Activity 多 Fragment 的导航方案 10...:lifecycle-runtime:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx...的 Transformations.switchMap() API 包装数据层的请求方法,这相当于在 ViewModel 和数据层中间使用 LiveData 进行通信。...又由于内存空间相对较大,因此可以存储大数据,但会受到内存空间限制; 2、onSaveInstanceState() :使用场景针对于应用被系统回收后重建对数据的恢复,由于应用进程在这个过程中会消亡,因此不能选择内存存储而只能选择使用持久存储

1.1K20

Android-ViewModelLiveData使用详解

我们可以在onSaveInstanceState()方法中保存数据,并从onCreate()方法中通过Bundle恢复数据,但这种方法只适用于可以对其进行序列的少量数据,而不适用于潜在的大量数据。...不会因为Activity的不可见导致Crash 当Activity不可见,即使有数据变化,LiveData也不会通知观察者。...创建LiveData package io.dcloud.H56580E2E.viewModelLiveData; import android.app.Application; import androidx.annotation.NonNull...比如:在你的手机进行翻转,activity会重新走生命周期。 * 那么如果在Activity中保存的数据,就很有可能,被复写,重置或者丢失。...LiveData * ViewModel是以关联生命周期的方式来存储管理UI相关的数据的类,即使configuration发生改变(比如旋转屏幕),数据仍然可以存在不会销毁(使用ViewModel就继承

3.4K30

如何正确的在 Android 上使用协程 ?

如今两年时间过去了,站在一名 Android 开发者的角度来看,Kotlin 的生态环境越来越好了,相关的开源项目学习资料也日渐丰富,身边愿意去使用或者试用 Kotlin 的朋友也变多了。...协程在 Android 上的使用 GlobalScope 在一般的应用场景下,我们都希望可以异步进行耗时任务,比如网络请求,数据处理等等。当我们离开当前页面的时候,也希望可以取消正在进行的异步任务。...LiveData Kotlin 同样为 LiveData 赋予了直接使用协程的能力。...添加如下依赖: implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0-alpha03" 直接在 liveData {} 代码块中调用需要异步执行的挂起函数...当 LiveData 进入 active 状态liveData{ } 会自动执行。当 LiveData 进入 inactive 状态,经过一个可配置的 timeout 之后会自动取消。

2.7K30

Jetpack--LifeCycle、ViewModel、LiveData

Jetpack是google官方的安卓开发工具集,目的是为了标准和加快开发效率,并且之后会持续更新 安卓开发中,google推荐使用MVVM架构,Jetpack集成了构建MVVM架构的几种工具,相比于以前的...使用,ViewModel的生命周期是独立于Activity的 三、LiveData LiveData对象提供了可观测方法,当数据发送改变,观测方能够观测到,并且线程安全,集成了LifeCycle的绑定生命周期特性...1.来实现一个定时器,线程中更新定时时间,使用LiveData使得ui上进行更新 布局文件很简单,一个TextView 定义ViewModel,并使用LiveData package com.aruba.livedata; import androidx.lifecycle.MutableLiveData; import...ViewModel,并观测LiveData的值,ui线程中使用setValue方法设置LiveData的值,非ui线程使用postValue方法 package com.aruba.livedata;

1.6K20

【Jetpack】Jetpack 简介 ( 官方架构设计标准 | Jetpack 组成套件 | Jetpack架构 | Jetpack 的存在意义 | AndroidX 与 Jetpack 的关系 )

的应用程序 ; 如 : ViewModel 管理 UI 数据模型 , LiveData 用于 响应数据 改变 , Room 管理数据库模块 等 ; UI 组件 : 创建 灵活 , 美观 , 易于扩展...的 UI 界面 ; 如 : ConstraintLayout 约束布局 , RecyclerView 列表 , ViewPager2 组件 ; 测试组件 : 创建 可靠 自动测试 模块 ; 如 : JUtils...每个组件 都有其 相应的 功能 , 根据 项目的需求 , 团队的分工 , 将各种组件 进行 组合使用 , 就可以 构成一个 高可靠性的 项目架构 ; 使用 Jetpack 组件组合成的 架构设计...、测试支持 Jetpack 提供了一系列的 测试组件 , 借助 Espresso , UI Automator , JUnit 测试组件 , 可以快速 创建 Android 自动测试 功能 , 提高...开发了很多开源项目 , 对 SDK 缺陷进行修复 , 这些开源项目最后都并入了 AndroidX 项目 , 其中每个子项目都在更新 , 因此 AndroidX 更新频率很高 ; AndroidX

63110

是时候更新手里的武器了—Jetpack架构组件简析

所以就需要,databinding进行数据的绑定,单向或者双向。viewmodel进行数据管理,绑定view和数据。lifecycle进行生命周期管理。LiveData进行数据的及时反馈。...数据绑定 “数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序地)将布局中的界面组件绑定到应用中的数据源。...5)将布局视图绑定到架构组件 这一块就是实际应用了,jetpack其他组件相结合使用,形成完整的MVVM分层架构。...当然实际使用起来也确实要方便很多,比如liveData结合,就能在数据查询后进行自动UI更新。 既然Room这么优秀,那就用起来吧。Room的接入主要有三大点:DataBase、Entity、Dao。...官方文档 Demo代码地址 WorkManager “使用 WorkManager API 可以轻松地调度即使在应用退出或设备重启仍应运行的可延迟异步任务。

2.9K20

安卓开发中的Model-View-Presenter(MVP模式)

尽管这些体系结构(尤其是MVVM)实现了分离组件并使其可测试可重用的目的,但我们仍然发现了一些问题,使我们自问这是否是我们可以使用的最佳体系结构。...像这样,我们可以使用RxJava在我们的服务,所以我们可以操作数据与我们所有这个库提供的运营商LiveData视图的一部分,这将使我们能够使一个实现,意识到我们的活动的生命周期的变化,甚至使用谷歌提供的视图模型...为了能够在视图和服务组件之前应用“演示者优先”设计,定义这两个接口,例如方法事件 测试 在为我们的应用程序编写测试,重要的是我们可以测试独立的代码单元,这些代码单元在应用程序的其他部分没有副作用,它们的依赖关系可以被模仿...基础架构层(数据)也很容易测试,因为我们所要做的就是模拟服务器的响应,为此,我们将使用来自OkHttp的MockWebServer。 发展方向?...此外,这个视图模型可以直接将数据绑定注入到XML中,并使用LiveData将可视组件绑定到LiveData的可观察对象。

1.6K30

Android Compose开发

手动操纵视图会提高出错的可能性。如果一条数据在多个位置呈现,很容易忘记更新显示它的某个视图。此外,当两项更新以出人意料的方式发生冲突,也很容易造成异常状态。...父节点会在其子节点之前进行测量,但会在其子节点的尺寸放置位置确定之后再对自身进行调整。...它可以 Text 配合在一起使用。...: runtime-livedata: 1.5.1" } 传统 LiveData 的用法在 Compose 中并不好使,因为传统 LiveData 依赖于监听某个值的变化,并对相应的界面进行更新,而 Compose...如果设置一个较大的正值,则视图将显示在其他视图的上方。如果设置一个较小的负值,则视图将显示在其他视图的下方。当两个视图的 zIndex 相同时,它们将按照它们在布局文件中的顺序进行绘制。

22310

Android 架构组件的最新进展 (上篇)

其中 androidx.* 库与 Framework API 解耦,这能够提供向后兼容的同时,也能更频繁地更新。 Android Jetpack 中的架构组件可帮助您设计稳健、可测试且易维护的应用。...数据绑定库 数据绑定 (Data Binding) 库是一种支持库,借助该库,您可以使用声明性格式 (而非程序地) 将布局中的界面组件绑定到应用中的数据源。...但这个功能还停留在测试阶段,所以请在 Gradle 配置文件中使用如下代码手动打开: android.databinding.incremental = true Android Studio 更紧密地集成...更好地支持重构 在 IDE 里使用重构的方式修改函数名称之后,XML 中会同步进行更新。 ? 更好用的报错信息 数据绑定出错的信息可能一下子跳出来 1,000 条,这种尴尬将成为过去。...有没有更好的视图访问方式? ? 视图访问方法当然不止一种,但正如上图所示的,在简明、编译安全编译速度上,各个方法总有取舍。那有没有一种方法能一石 "三" 鸟呢? 即将到来!

89940

学习|Android中JetPack中的几个组件简单使用

前两天我还在做CameraX的小测试,不过没走通,因为现在非正式版本,等出了我再研究下吧。 ? 简单例子 ?...上面这个是引用fragment-ktx的引用,引用这个库是为了让我们更简单的调用ViewModel,一会儿的代码我会写出不用这个的调用方法,用这个的方法,当然引用这个它会提示要使用jvm1.8,所以还需要加上下面的这步...我们把要保存的数字显示信息分别用countshowmsg定义为MutableLiveData,把get方法做为从SavedStateHandle中进行读写直接保存。...然后再写一个按钮事件,就是点击按钮后直接对LiveData的两个数据进行写入,写入的方式上面也可以看出来,用的postValue。 布局文件中的DataBinding 使用DataBinding最外层要改为layout,然后数据源在data中进行指定,其中variable中的name就是下面的别名,type就是指向的数据源 ?

1.7K20

实战 | 使用 Kotlin Flow 构建数据流 管道

Flow 是一种基于流的编程模型,本文我们将向大家介绍响应式编程以及其在 Android 开发中的实践,您将了解到如何将生命周期、旋转及切换到后台等状态绑定到 Flow 中,并且测试它们是否能按照预期执行...您还可以在 ViewModel 中使用 androidx.lifecycle:lifecycle-livedata-ktx 包里的 Flow.asLiveData(): LiveData 将数据流转换为...LiveData,这样就可以像往常一样使用 LiveData 来实现这件事情。...测试数据流 测试数据流可能会比较复杂,因为要处理的对象是流式数据,这里介绍在两个不同的场景中有用的小技巧: 首先是第一个场景,被测单元依赖了数据流,那对此类场景进行测试最简单的方法就是用模拟生产者替代依赖项...在本例中,您可以对这个模拟进行编程以对不同的测试用例发送其所需要的内容。您可以像上面的例子一样实现一个简单的冷流,测试本身会对受测对象的输出进行断言,输出的内容可以是数据流或其他任何类型。

1.4K10
领券