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

简易安卓句分器实现

在这个应用的开发过程中,我使用了 Android 的三个重要组件:Fragment、ViewModel 和 View Binding。下面,我将详细介绍这三者的关系以及如何实现具体功能的代码。1....在应用中,多个 Fragment 可以在同一个 Activity 中共存,各自管理自己的 UI 和生命周期事件。...在我们的应用中,HomeFragment 负责与用户交互,例如输入文本和处理按钮点击事件。...其主要作用是持久化数据,使其能够在 Fragment 或 Activity 的生命周期变化(如屏幕旋转)时依然可用。在我们的应用中,HomeViewModel 用于管理文本数据和句子划分的逻辑。...Fragment、ViewModel 和 View Binding 之间的关系如下:Fragment:负责管理 UI 和用户交互逻辑,通过 ViewModel 获取和存储数据,使用 View Binding

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

    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 MVVM框架搭建(一)ViewModel + LiveData + DataBinding

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

    17K97

    关于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亦然)。

    87110

    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

    19710

    “终于懂了“系列: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.8K10

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

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

    2.7K32

    如何构建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实现,更新UI在ViewModel里面做(更新绑定的数据源即可),Activity 要做的事就是初始化一些控件(如控件的颜色,添加

    1.3K10

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

    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 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应用。

    61620

    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

    87520

    【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

    86920

    Kotlin开发框架建议入门实践

    LiveData与ViewModel在Kotlin与Jetpack的结合中,LiveData和ViewModel是两个非常重要的组件。...而ViewModel则专门用于管理与UI相关的数据,它具有强大的生命周期感知能力,能够在配置更改(如屏幕旋转)后保持数据状态。...以下是一个简单的示例,展示了如何在Kotlin中使用LiveData和ViewModel:class MyViewModel : ViewModel() { private val _data =...Room数据库Room是Jetpack中的一个持久化库,它提供了抽象层,使得数据库操作更加简单。Room支持LiveData等组件,可以与Kotlin无缝集成,实现数据的自动更新和同步。...通过使用LiveData和ViewModel,开发者可以轻松地将数据与UI进行绑定,并在数据发生变化时自动更新UI。

    25120

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

    2.3 LiveData + Lifecycle 实现 1 + 1 > 2 LiveData在Lifecycle的加持下可以实现只在可见状态接收通知,说的通俗一点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.8K01

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

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

    84300
    领券