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

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

一、LiveData 简介 ---- 视图 View 与 数据模型 Model 通过 ViewModel 架构组件 进行绑定 , 可以立即 将 ViewModel 数据设置到 UI 界面..., 运行过程 , UI 界面 , 可以 修改 ViewModel 的值 , 并 将新的值设置 视图 View ; 但是 , 如果 数据 ViewModel 中发生的改变 , 那么如何...} }) 三、ViewModel + LiveData 简单示例 ---- 设置一个定时器 , 定时更新数据 , ViewModel 数据发生了改变 , 需要 主动通知 视图 View 进行修改...; 使用 传统的开发方式 , 可以使用 线程通信 , Handler 或者 广播 等形式 , 子线程通知主线程更新 UI ; 使用 LiveData , 将数据定义 LiveData ,...+ LiveData 代码 自定义 ViewModel 子类继承 ViewModel , ViewModel , 定义 LiveData 类型的数据 , 此处选择使用 MutableLiveData

1.2K20

Android-ViewModel和LiveData使用详解

我们可以onSaveInstanceState()方法中保存数据,并从onCreate()方法通过Bundle恢复数据,但这种方法只适用于可以对其进行序列化的少量数据,而不适用于潜在的大量数据。...使用ViewModel的话ViewModel会自动保留之前的数据并给新的Activity或Fragment使用。...直到当前Activity被系统销毁时,Framework会调用ViewModel的onCleared()方法,我们可以onCleared()方法做一些资源清理操作。...观察者可以每次应用程序数据更改时更新UI,而不是每次发生更改时更新UI。 没有内存泄漏 当观察者被绑定他们对应的LifeCycle以后,当页面销毁时他们会自动被移除,不会导致内存溢出。...ViewModel { //创建LiveData(可以创建多个不同类型的 LiveData..)

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

Android Jetpack系列 之LiveData

LiveData 与普通可观察类不同的是LiveData具有生命周期感应能力,比如我们页面中进行网络请求结束,需要将数据显示UI上,如果此时页面被销毁就会有空指针等异常,我们还需要在页面销毁的时候单独处理...这里我们新增需求将计数的数字显示TextView。...、保存、显示分数 需求如下: 输入输入分数、textview显示分数 <EditText android:id="@+id/ed_socre" android:layout_width...获取到的都是一个新的LiveData对象,所以我们无法监听到数据的变化,那么我们该如何做呢,这个时候switchMap就派上用场了 我们ViewModel 定义 检测分数变化的LiveData对象...实际项目开发我们使用switchMap的频率还是很高的,毕竟 只要LiveData对象是调用其他方法获取的 ,我们就可以这样做, 点击事件我们设置了可观察数据:分数,当分数改变的时候,就会执行switchMap

1.1K20

关于Android架构,你是否还在生搬硬套?

prefix } UI层 View{ textView = model.prefix + model.title } 起初我们的textView显示的是model的title,但后端调整我们需要在...在当前的Android可以使用DataBinding实现同样的效果,以Jetpack MVVM为例:ViewModel从Repository拿到数据暂存到ViewModel对应的ObservableFiled...引入diff之前: RecyclerView想要实现动态删除、添加、更新需要分别手动更新数据和UI,这样中间插了一道并且分别更新数据和UI已经违背了前面所说的数据驱动UI,而我们想要的是不管删除、添加或者更新只有一个入口...,只要改变数据源就会驱动UI做更新,想要满足这一原则只能改变数据对RecyclerView做全部刷新,但这样会造成性能问题,复杂的界面会感到明显的卡顿。...所以我建议Kotlin 碰到数据处理尽量使用链式高阶函数(RxJava、Kotlin Flow亦然)。

84110

Android MVVM框架搭建(一)ViewModel + LiveData + DataBinding

ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。DataBinding数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局的界面组件绑定到应用数据源。...因为这个结果是对的,那就是数据持久化,因为我们知道手机切换屏幕的时候Activity是会重新创建的,因此如果我们的数据是放在Activity,那么切换屏幕之后就会重置,输入框也不会有值,但是通过ViewModel...我将会输入study、666,然后点击登录按钮,也会将输入框的数据显示TextView上,这样是否会省去很多不必要的繁琐工作呢?...下面运行一下: ② 双向绑定   双向绑定是建立单向绑定的基础上,实际的开发中用到双向绑定的地方并没有单向绑定多,双向绑定举一个例子,输入输入数据时候直接将数据数据进行改变,这里会用到...第二个就是响应的地方,通过这种方式去显示ViewModel对象的变量数据控件上。这里我把这两个TextView放到输入框的上方 第三个地方,也是双向绑定的意义,就是UI改变数据源。

14.4K86

“终于懂了“系列:Jetpack AAC完整解析(三)ViewModel 完全掌握!

那么如何做到 因配置更改而新建Activity数据恢复呢?...二、ViewModel使用 2.1 基本使用 了解了ViewModel作用解特点,下面来看看如何结合LivaData使用的。(gradle依赖第一篇已经介绍过了。)...步骤: 继承ViewModel自定义MyViewModel MyViewModel编写获取UI数据的逻辑 使用LiveData将获取到的UI数据抛出 Activity/Fragment中使用ViewModelProvider...三、源码分析 经过前面的介绍,我们知道ViewModel的核心点 就是 因配置更新而界面(Activity/Fragment)重建ViewModel实例依然存在,这个如何实现的呢?...到这里,我们知道了 ViewModel如何存储、实例如何获取的,但开头说的分析重点:“因配置更新而界面重建ViewModel实例依然存在”,这个还没分析到。

1.7K10

如何构建Android MVVM应用程序

应该如何设计?更是很少有博文来告诉你Android 如何通过Data Binding 去构建MVVM 的应用框架。这也就是是本篇文章的重点。...而且UI改变牵扯的逻辑耦合度太高,一旦控件更改(比较TextView 替换 EditText等)牵扯的更新UI的接口就必须得换。 复杂的业务同时会导致presenter层太大,代码臃肿的问题。...数据驱动 MVVM,以前开发模式必须先处理业务数据,然后根据的数据变化,去获取UI的引用然后更新UI,通过也是通过UI来获取用户输入,而在MVVM数据和业务逻辑处于一个独立的View Model...更新 UI MVVM,我们可以工作线程中直接修改View Model的数据(只要数据是线程安全的),剩下的数据绑定框架帮你搞定,很多事情都不需要你去关心。...也不写需要根据业务逻辑来更新UI的代码,因为更新UI通过Binding实现,更新UIViewModel里面做(更新绑定的数据源即可),Activity 要做的事就是初始化一些控件(如控件的颜色,添加

1.2K10

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

ViewModel 和 LiveData 是 Android Jetpack 组件库的两个核心组件,它们能帮助开发者更有效地管理 UI 相关的数据,并且能够配置变更(如屏幕旋转)时保存和恢复 UI...用于ViewModel数据返回时通知View更新,是ViewModel和View之间的桥梁 那么如何在 Kotlin 中正确优雅地使用 ViewModel 和 LiveData 呢。...更新和观察数据 当通过 ViewModel更新数据时,观察者会自动收到通知并更新相应的 UI 组件。...例如,当调用了 viewModel.updateData("New Data"),MainActivity textView 会自动显示新数据,因为它在观察 LiveData。...平时像上面例子中和LiveData、ViewModel一起使用的比较多 总结 通过 ViewModel 、 LiveData,可以实现数据的生命周期感知,并且配置变更(如设备旋转)时也能保持 UI

4810

Android MVVM框架搭建(一)ViewModel + LiveData + DataBinding

ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。DataBinding数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局的界面组件绑定到应用数据源。...因为这个结果是对的,那就是数据持久化,因为我们知道手机切换屏幕的时候Activity是会重新创建的,因此如果我们的数据是放在Activity,那么切换屏幕之后就会重置,输入框也不会有值,但是通过ViewModel...我将会输入study、666,然后点击登录按钮,也会将输入框的数据显示TextView上,这样是否会省去很多不必要的繁琐工作呢?...下面运行一下: ② 双向绑定   双向绑定是建立单向绑定的基础上,实际的开发中用到双向绑定的地方并没有单向绑定多,双向绑定举一个例子,输入输入数据时候直接将数据数据进行改变,这里会用到...第二个就是响应的地方,通过这种方式去显示ViewModel对象的变量数据控件上。这里我把这两个TextView放到输入框的上方 第三个地方,也是双向绑定的意义,就是UI改变数据源。

2.2K32

Android Jetpack - LiveData

每次应用程序数据更改时,你的观察者都可以每次更改时更新 UI,而不是更新 UI 没有内存泄露 观察者绑定到 Lifecycle 对象,并在其相关生命周期被破坏自行清理 不会因为活动停止而崩溃 如果观察者的生命周期处于非活动状态...例如,后台活动返回前台后立即接收最新数据 配置更改友好 如果由于配置更改(例如设备轮换)而重新创建活动或片段,则会立即接收最新的可用数据 资源共享 你可以使用单例模式扩展 LiveData 对象以包装系统服务...LiveData 对象通常存储ViewModel 对象,并通过 getter 方法访问,如以下示例所示: class NameViewModel : ViewModel() { private...// 每次点击 textView 时,都更新一下 name textView.setOnClickListener { viewModel.changeName(...与 Room 一起使用 LiveData Room 持久化库支持可观察查询并返回 LiveData 对象,这些查询一般 DAO 编写 更新数据库时,Room 会生成更新 LiveData 对象所需的所有代码

2K30

Android学习(简单使用Bottom Navigation Activity来实现底部导航栏)

下面我们就来看看如何使用Bottom Navigation Activity来完成简单的底部导航栏功能。...那么如何更改点击的页面呢? 自定义切换页面(Fragment) 这里我们使用framgment来切换页面。...当然这只是最简单的使用,如果想要实现更复杂的功能还要同学们自己钻研啦! 更新 最新版的Android Studio(3.5)给出的模板和之前的不太一样,所以对文章进行一下更新。...还是先看一下效果,一个button和一个textview,点击button显示现在的时间: 文件结构 之前版本创建只有一个java文件,现在是有多个文件: dashboard,home,notifications...fragment用来显示ui界面,而viewmodel则是给ui界面提供数据,view里的每一个控件viewmodel里都有一个对应的数据对象,如果要更新view上的ui界面,只需要更新viewmodel

2.1K10

Android Jetpack - ViewModel

ViewModel 简述 ViewModel 旨在以生命周期感知的形式存储和管理 UI 控制器(Activity/Fragment 等)相关的数据,可以解决 UI 控制器数据无法正确保留以及数据在其复杂的生命周期中难以维护的痛点...ViewModel 会从你第一次创建(通常在 onCreate 时)直到此 Activity 完成并销毁,Activity 在生命周期中可能会多次销毁创建 ,但 ViewModel 始终存活 如何使用...我用一个非常简单的 Demo 来展示它的基础用法,通常我们为 app 集成 ViewModel 遵循如下几个步骤: 1、创建一个继承 ViewModel 的类来分离出 UI 控制器数据 2、建立 ViewModel...: ViewModel(){} 以上面的计时器为例,我们需要 UI 保持持续更新时间的状态,所以 ViewModel 添加一个 startTime 变量用于存储不断累计的时间 class MainActivityViewModel...,下一步我们只需要在 Activity 订阅它即可实时更新数据到 UI class CustomTimerViewModel : ViewModel() { private var startTime

83420

深入理解与运用Android Jetpack ViewModel

这样,UI控制器可以重建重新获取之前的ViewModel实例,并继续使用其中的数据,从而避免数据丢失和重复加载。...; }, 2000); } } UI控制器中使用ViewModel Activity或Fragment获取ViewModel的实例,并观察数据变化: viewModel...// 更新UI textView.setText(data); }); viewModel.fetchData(); // 触发数据获取操作 ViewModel与跨组件通信 ViewModel...().observe(this, data -> { // 更新UI textView.setText(data); }); Fragment中共享数据: sharedViewModel...ViewModel的出现极大地简化了Android开发数据管理和生命周期处理,使得应用更加健壮和高效。实际开发,合理使用ViewModel能够帮助你构建优雅、易维护的Android应用。

39520

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

Model ---- Activity , 存在两种元素 , 视图 View 和 填充视图数据用的 数据模型 Model ; 如果将 视图 和 数据模型 都写在 Activity , 二者...视图 与 数据模型 之间 保持 通信 ; 这样 Activity 的代码量减少了 , 只需要维护 视图 View 相关内容 , 增加了代码的可维护性 , 以及可测试性 ; ViewModel 架构...以及 数据模型 Model 销毁 ; Activity 的组件 获取数据时 , 不直接从 数据模型 Model 获取 , 而是 从 ViewModel 架构组件获取 ; ViewModel 作用...: 一个 ViewModel 实例对象 可以与 多个 Activity 或 Fragment 绑定 ; 创建 : Activity 的 首次启动时 创建 ViewModel 实例对象 , 如果 Activity...---- ViewModel 使用注意事项 : 使用 ViewModel 时 , 不要将 Context 上下文对象传入 ViewModel , 否则会导致内存泄漏 ; 如果要使用 Context

79720

引入Jetpack架构,你的App会发生哪些变化?

2.3 LiveData + Lifecycle 实现 1 + 1 > 2 LiveDataLifecycle的加持下可以实现只可见状态接收通知,说的通俗一点Activity执行了onStop()内部的...多次改变liveData值,等回到ActivityA时 你肯定不希望Observer收到多次通知而引发textView多次重绘。...相提并论,其实这二者根本没有同一个层次,MVVM ViewModel是MVVM架构的一个角色,看不见摸不着只是一种思想。...所以结论是Jetpack ViewModel可以充当MVVM ViewModel 但二者并不等价 3.2 如何优雅的实现Fragment之间通讯?...而双向绑定通常用在可交互式的View,比如EditText内容会通过用户输入而改变的,此时需要通过双向绑定才能保证数据、UI一致。

1.9K80

无处安放的业务逻辑使你Android架构上吃了多少生硬的亏,是否还在生搬硬套?

prefix } UI层 View{ textView = model.prefix + model.title } 起初我们的textView显示的是model的title,但后端调整我们需要在...在当前的Android可以使用DataBinding实现同样的效果,以Jetpack MVVM为例:ViewModel从Repository拿到数据暂存到ViewModel对应的ObservableFiled...引入diff之前: RecyclerView想要实现动态删除、添加、更新需要分别手动更新数据和UI,这样中间插了一道并且分别更新数据和UI已经违背了前面所说的数据驱动UI,而我们想要的是不管删除、添加或者更新只有一个入口...,只要改变数据源就会驱动UI做更新,想要满足这一原则只能改变数据对RecyclerView做全部刷新,但这样会造成性能问题,复杂的界面会感到明显的卡顿。...所以我建议Kotlin 碰到数据处理尽量使用链式高阶函数(RxJava、Kotlin Flow亦然)。

1.6K00

引入Jetpack架构,你的App会发生哪些变化?

ViewModel与LiveData真乃天作之合 3.1 如何优雅的实现Fragment之间通讯? 3.2 由ViewModel担任 VM/Presenter 的好处有哪些? 4....2.3 LiveData + Lifecycle 实现 1 + 1 > 2 LiveDataLifecycle的加持下可以实现只可见状态接收通知,说的通俗一点Activity执行了onStop()内部的...相提并论,其实这二者根本没有同一个层次,MVVM ViewModel是MVVM架构的一个角色,看不见摸不着只是一种思想。...所以结论是Jetpack ViewModel可以充当MVVM ViewModel 但二者并不等价 3.2 如何优雅的实现Fragment之间通讯?...而双向绑定通常用在可交互式的View,比如EditText内容会通过用户输入而改变的,此时需要通过双向绑定才能保证数据、UI一致。

82100

Jetpack--LifeCycle、ViewModel、LiveData

Jetpack是google官方的安卓开发工具集,目的是为了标准化和加快开发效率,并且之后会持续更新 安卓开发,google推荐使用MVVM架构,Jetpack集成了构建MVVM架构的几种工具,相比于以前的...,省去了我们以前onResume,onPause等方法的操作 1.LifeCycle解耦页面与组件 我们有一个Activity,布局文件如下: <?...层业务 1.瞬态数据保存 例如以前我们手机屏幕旋转时,如果没有配置,那么Activity会重新创建,数据就会丢失 使用ViewModel,我们可以什么都不做就解决这个问题 现在来创建一个Activity...9/10. */ class NumberViewModel extends ViewModel { public int number; } Activity中使用ViewModelProvider...,当数据发送改变时,观测方能够观测到,并且线程安全,集成了LifeCycle的绑定生命周期特性 1.来实现一个定时器,线程更新定时时间,使用LiveData使得ui上进行更新 布局文件很简单,一个TextView

1.6K20
领券