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

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

桥梁 ; 传统 Android 开发 , 视图 View 与 数据模型 Model 都在 Activity 维护 , 导致 二者有很高的耦合度 , 不利于代码维护 ; 引入了 ViewModel...使用要点 : 首先 , 创建 自定义 ViewModel 视图模型 类 , 继承 androidx.lifecycle.ViewModel 类 , 该类就是 要设置到 视图 的 数据模型 ; 与...DataBinding 结合使用时 , 在 DataBinding 布局设置的就是该 视图模型 类对象 ; 该 ViewModel 类 , 还 使用了 LiveData , 可以实时监听数据改变..., 可以将 运行过程 ViewModel 的 Model 模型数据改变 通知 视图 View , 令视图组件显示最新的数据内容 ; 在 ViewModel 中使用了 LiveData 后 , 必须调用...更新视图 操作 ; LiveData 使用核心要点 : 首先 , 在 自定义 ViewModel 类 , 定义 MutableLiveData 成员 ; import androidx.lifecycle.MutableLiveData

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

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

一、LiveData 简介 ---- 在 视图 View 与 数据模型 Model 通过 ViewModel 架构组件 进行绑定后 , 可以立即 将 ViewModel 的数据设置到 UI 界面...视图 View ; 二、LiveData 使用方法 ---- 首先 , 在 ViewModel 视图模型 定义 LiveData 数据 , 如 MutableLiveData , class MyViewModel...; 使用 传统的开发方式 , 可以使用 线程通信 , Handler 或者 广播 等形式 , 在子线程通知主线程更新 UI ; 使用 LiveData 后 , 将数据定义在 LiveData ,...+ LiveData 代码 自定义 ViewModel 子类继承 ViewModel , 在 ViewModel , 定义 LiveData 类型的数据 , 此处选择使用 MutableLiveData...定义 LiveData 类型的数据 , 此处选择使用 MutableLiveData 数据类型 , 维护一个 Int 类型的数据 , 当该 Int 值发生改变时 , 会触发 LiveData

1.2K20

“终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索!

点击上方胡飞洋可以关注哦~ 前面三篇介绍了Jetpack 架构组件 最重要 的部分:生命周期组件-Lifecycle、感知生命周期的数据组件-LiveData、视图模型组件-ViewModel。...二、Android开发的架构 具体到Android开发,开发架构就是描述 视图层、逻辑层、数据层 三者之间的关系和实施: 视图层:用户界面,即界面的展示、以及交互事件的响应。...View,视图,即Activity/Fragment ViewModel,视图模型,负责业务逻辑。 注意,MVVM这里的ViewModel就是一个名称,可以理解为MVP的Presenter。...3.1 Jetpack MVVM 理解 Jetpack MVVM 是 MVVM 模式在 Android 开发的一个具体实现,是 Android Google 官方提供并推荐的 MVVM实现方式。...将 UserListViewModel 的字段类型更改为 MutableLiveData。现在,更新数据时,系统会通知 UserListActivity。

1.9K10

安卓UI

您的应用必须在此文件声明其所有组件,该文件必须位于应用项目目录的根目录。 - 应用资源 应用资源是指代码使用的附加文件和静态内容,例如位图、布局定义、界面字符串、动画说明等。...布局的所有元素均使用 View 和 ViewGroup 对象的层次结构进行构建。View 通常绘制用户可查看并进行交互的内容。...- Activity Activity类是 Android 应用的关键组件,而 Activity 的启动和组合方式则是该平台应用模型的基本组成部分。...您可以在一个 Activity 组合多个片段,从而构建多窗格界面,并在多个 Activity 重复使用某个片段。...o 与 Activity 通信 片段可通过 getActivity() 访问 FragmentActivity 实例,并轻松执行在 Activity 布局查找视图等任务 View listView

1.3K30

解决android viewmodel 数据刷新异常的问题

3年的wpf开发经验,自认为对数据驱动UI开发模式的使用不是问题,但当开始研究android的mvvm模式开发时,发现两年多的android开发经验已经将之前的wpf开发忘得7788了。...尝试好多方法监听的log始终不得见,最后一次尝试将viewmodel的List< 改成了Integer,直接在定义类型时初始化,发现好用。...刚开始使用 dagger2 + DataBinding 的结构,很多东西也不是很清晰。 现象 一个页面有三块布局,我使用一个Activity搭配三个Fragment实现。...通过三个Fragment共同使用Activity的ViewModel来实现数据共享。 但是最后出现个现象就是只有刚进入页面时,ViewModel的数据会显示在视图上。...通过点击事件更新ViewModel ObservableField 对象的数据,并不会刷新视图。 ?

1.3K21

区域设置更改和 AndroidViewModel 反面模式

AndroidViewModel antipattern 原文作者:Jose Alcérreca 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:solerji TL;DR:从视图模型公开资源...建议的做法是避免处理在 ViewModels 具有生命周期的对象。 让我们看看跟踪器基于此问题的示例:在系统区域设置更改时更新 ViewModel 。...如果有区域设置更改,则不会重新创建视图模型。这将导致我们的应用程序显示废弃的数据,因此只能部分本地化。...由于视图(活动、片段等)具有生命周期意识,因此它将在配置更改后重新创建,以便正确地重新加载资源。...我们在以 Java 为基础的 Android 架构存储库解决了这个问题 Java 以及在Kotlin 分支上。我们也把资源转移到 数据绑定布局。

10410

区域设置更改和 AndroidViewModel 反面模式

AndroidViewModel antipattern 原文作者:Jose Alcérreca 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:solerji TL;DR:从视图模型公开资源...建议的做法是避免处理在 ViewModels 具有生命周期的对象。 让我们看看跟踪器基于此问题的示例:在系统区域设置更改时更新 ViewModel 。...如果有区域设置更改,则不会重新创建视图模型。这将导致我们的应用程序显示废弃的数据,因此只能部分本地化。...由于视图(活动、片段等)具有生命周期意识,因此它将在配置更改后重新创建,以便正确地重新加载资源。...我们在以 Java 为基础的 Android 架构存储库解决了这个问题 Java 以及在Kotlin 分支上。我们也把资源转移到 数据绑定布局。

1.2K60

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

实现登录 二、LiveData使用 ① 可修改数据 ② 数据观察 三、DataBinding使用 ① 单向绑定 ② 双向绑定 四、源码 前言   MVVM框架出来已经有一段时间了,现在也有很多的项目运用了...正文   MVVM框架是有由来的,这个其实说来话长了,还得从最开始的Android 视图、UI来说起。...View只做和UI相关的工作,涉及任何业务逻辑,涉及操作数据,处理数据。UI和数据严格的分开。...(); public MutableLiveData pwd = new MutableLiveData();   请注意这里使用的是MutableLiveData,表示值的内容开变动...下面我们运行一下: 三、DataBinding使用   Android的DataBinding在已经内置了,因此只需要在app模块的build.gradle开启就可以使用了。

14.3K86

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

实现登录 二、LiveData使用 ① 可修改数据 ② 数据观察 三、DataBinding使用 ① 单向绑定 ② 双向绑定 四、源码 前言   MVVM框架出来已经有一段时间了,现在也有很多的项目运用了...正文   MVVM框架是有由来的,这个其实说来话长了,还得从最开始的Android 视图、UI来说起。...View只做和UI相关的工作,涉及任何业务逻辑,涉及操作数据,处理数据。UI和数据严格的分开。...(); public MutableLiveData pwd = new MutableLiveData();   请注意这里使用的是MutableLiveData,表示值的内容开变动...下面我们运行一下: 三、DataBinding使用   Android的DataBinding在已经内置了,因此只需要在app模块的build.gradle开启就可以使用了。

2.2K32

MVVM 进阶版:MVI 架构了解一下~

前言 -- Android开发发展到今天已经相当成熟了,各种架构大家也都耳熟能详,如MVC,MVP,MVVM等,其中MVVM更是被官方推荐,成为Android开发的显学。...不过软件开发没有银弹,MVVM架构也不是尽善尽美的,在使用过程也会有一些不太方便之处,而MVI可以很好的解决一部分MVVM的痛点。...代码动态view部分 控制层(Controller):主要负责业务逻辑,在android由Activity承担,同时因为XML视图功能太弱,所以Activity既要负责视图的显示又要加入控制逻辑,承担的功能过多...模型层(Model):主要负责网络请求,数据库处理,I/O的操作,即页面的数据来源 由于androidxml布局的功能性太弱,Activity实际上负责了View层与Controller层两者的工作,...但通过以上的分析与介绍,我相信使用MVI架构代替没有使用DataBinding的MVVM是一个比较好的选择~ 相关视频推荐: 【2021最新版】Android studio安装教程+Android(安卓

1.9K20

正确认识 MVCMVPMVVM

前言 做移动端开发和前端开发的人员,对 MVC、MVP、MVVM 这几个名词应该都不陌生,这是三个最常用的应用架构模式,目的都是为了将业务和视图实现代码分离,从而使同一个程序可以使用不同的表现形式。...Model 为模型层,主要管理业务模型的数据和行为;View 为展示层,其职责就是管理用户界面。三个架构模式目的都是为了解耦 Model 和 View,主要不同点就在于三者实现解耦的方案不同。...而 ViewModel = Model of View,即视图模型,封装的是视图的表示逻辑和数据,是对视图的抽象,包括视图的属性和命令,或视图的状态和行为。...为了简便,我们编写完整代码,就只用伪代码简单模拟一下实现流程: public class LoginRepository { ......然后,我们将 userName、password、uid 三个变量声明为 MutableLiveData 类型,就可以实现自动将数据变化通知给界面。

2.5K32

Android技术栈(四)Android Jetpack MVVM 完全实践

定义这个布局所要绑定的变量类型,使用name来指定变量名,然后用type来指定其类型....3.2 LifecycleOwner LifecycleOwner是Lifecycle组件包的一个接口,所有需要管理生命周期的类型都必须实现这个接口。...在项目中,只要继承这些类型,可以轻松的通过LifecycleOwner#getLifecycle()获取到Lifecycle实例.这是一种解耦实现,LifecycleOwner包含任何有关生命周期管理的逻辑...查看源码得知,他就是一个空接口,包含任何实现,但是若我们想使用,还是得继承此接口。...JW大神的RxBinding来实现这一需求,但是今天我们讨论RxBinding,因为网上的讨论RxBinding的文章已经太多了,随便抓一篇出来都已经非常优秀.

3.8K01

LiveData 还有学习的必要吗?—— Jetpack 系列(2)

本文已收录到 GitHub · Android-NoteBook[1] 。这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] 跟我一起成长。...前言 LiveData 是 Jetpack 组件较常用的组件之一,曾经也是实现 MVVM 模式的标准组件之一,不过目前 Google 更多推荐使用 Kotlin Flow 来代替 LiveData;...这个过程没有使用反射,也不会存在不支持多观察者的问题。...为了优化这个问题,可以使用美团 ModularEventBus 方案:用接口定义事件来实现强约束,在动态代理取 接口名_方法名 作为事件名,再完成后续 LiveDataBus 的交互。...module名 @ModuleEvents() public class DemoEvents { //指定消息类型,那么消息的类型默认为Object public static final

3.5K10

Android Jetpack系列 之LiveData

所以我们就要做到当计数的数字发生改变时,通知TextView便于TextView重新显示,如果矬一点,可能会想到将View传递到ViewModel,让ViewModel持有View的引用,这种方式确实可以实现需求...LiveData的类型 代码如下所示: public class Main3ActivityViewModel extends ViewModel { public MutableLiveData...嚯嚯,pia pia 打脸 这里报错的原因是因为我们的计数demo是运行在子线程的,而LiveData的setValue方法只能在主线程调用,如果想要在子线程调动只能使用postValue方法,我们将赋值方法改为...ok,这样的话 我们就使用LiveData实现上面的需求了,但是有没有感觉有什么问题呢,问题就是这个mCount可变类型的数据暴露给了外部,导致我们在ViewModel外也是可以赋值的,这样违反了ViewModel...在实际项目开发我们使用switchMap的频率还是很高的,毕竟 只要LiveData对象是调用其他方法获取的 ,我们就可以这样做, 在点击事件我们设置了可观察数据:分数,当分数改变的时候,就会执行switchMap

1.1K20

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

ViewModel 和 LiveData 是 Android Jetpack 组件库的两个核心组件,它们能帮助开发者更有效地管理 UI 相关的数据,并且能够在配置变更(如屏幕旋转)时保存和恢复 UI...ViewModel作用 瞬态数据丢失的恢复,比如横竖屏 异步调用的内存泄漏 处理类膨胀提高维护难度和测试难度 使视图和数据能够分离 是介于视图View和数据Model之间的桥梁 LiveData的作用...androidx.lifecycle.ViewModel class MyViewModel : ViewModel() { // 使用 MutableLiveData 来保存数据...在 Fragment 中使用 ViewModel 如果在 Fragment 中使用 ViewModel,可以使用 viewModels 或 activityViewModels: import android.os.Bundle...平时像上面例子中和LiveData、ViewModel一起使用的比较多 总结 通过 ViewModel 、 LiveData,可以实现数据的生命周期感知,并且在配置变更(如设备旋转)时也能保持 UI

4610

Android MVVM 架构应用实现

MVVM架构使用的组件有ViewModel、LiveData、ViewBinding/DataBinding等,这些组件都是Jetpack库的组件。...[MVVM架构图] 了解了MVVM的基本架构和其中各个组件的作用,可以开始代码实现了。我做这个项目的初衷是因为最近在整理收集Android常用的开源库,为了更方便的展示所实现的一个应用。...BmobRepository类中有一个挂起函数getAllRecommendLibrary(libraryRecommendData: MutableLiveData)用来获取云数据库的数据...: 实现HomeFragment类作为视图层,其中分为两步: 变量homeViewModel作为ViewModel获取数据,使用Koin后的初始化方式十分简单 private val homeViewModel...本项目使用开源组件库:koin、timber、permissionx、BaseRecyclerViewAdapterHelper 视频:Android中高级进阶之MVVM与JetPack

1.2K20

开发以太坊安卓钱包系列3 - 资产信息展示

最早写Android的时候,数据和界面经常耦合在一起,一个Activity文件总是特别大,每当产品界面改版就非常痛苦,吐槽下,很多产品经理都喜欢对界面改来改去。...后来Google 推荐多个架构模式: MPV、 MVVM模式来解决数据和UI耦合的问题,登链钱包代码[1],使用的就是MVVM模式,所以对它做一个简单介绍,下面是MVVM的视图和数据的交互图: ?...View 与 Model 直接发生联系, 而是通过ViewModel负责接收View层的事件以及获取并处理数据,ViewModel层的数据变化也会通知给View层进行相应的UI的更新,从而实现业务逻辑和...显示当前账号 可以分为两个步骤: •从数据库读取账号;•界面显示账号 TokensViewModel定义了一个MutableLiveData defaultWallet ,从数据库读取账号会保存在...defaultWallet,然后UI对 defaultWallet 进行观察显示。

1.3K30

LiveData的前世今生

用户点击按钮,于是跳转了Detail界面 用户按下返回键,回到列表界面中去 观察者在Activity处于Pause的堆栈时,会变成活动状态,返回时,会再次成为活动状态 但此时,观察的值仍然是True...; import android.arch.lifecycle.LifecycleOwner; import android.arch.lifecycle.MutableLiveData; import...image.png Recommended: Use an Event wrapper 在这种解决方法,你可以明确地管理事件是否被处理,从而减少错误。使用方法如下所示。...确保你的用户界面与你的数据状态相匹配:LiveData遵循观察者模式,当生命周期状态改变时,LiveData会通知观察者对象。你可以整合你的代码来更新这些观察者对象的UI。...https://developer.android.com/topic/libraries/architecture/livedata#extend_livedata 但是,这些优势的一些场景,并不会在所有情况下都发挥作用

1.1K10
领券