最近在工作中在一个页面使用了 DataBinding ,实践了一下 Databinding 和 LiveData 的结合。今天就来分享一下具体的内容。...本篇文章适合对 Databinding 及 LiveData 有过了解(阅读过文档即可),阅读时间约 20 分钟 在过完 Databinding 文档的时候,首先看到了利用 Observable 接口的子类来实现使用可观察数据对象...但是 Observable 对象毕竟是不可以与生命周期绑定的,数据监听我们还是比较希望能使用 LiveData去做。当然后面官方也提供了和 LiveData 结合的使用方式。...总结 到这里,我们就翻了一遍源码,弄清楚了 DataBinding 是怎么工作的,又是如何和 LiveData 相结合,绑定上生命周期的。...继续思考一下使用了 DataBinding 之后的代码写法: View 只负责 UI 的处理和绑定 ViewModel 里面存储了数据,或者说是状态。
DataBinding 是属于 Jetpack 的一个支持库,可以让你以在布局中声明属性的方式替代编码方式将布局中的 UI 组件和应用数据进行绑定 通常我们让控件和数据交互的方式如下面的代码,调用 findViewById...}" /> 这样你就不用在 Activity 中调用 UI 框架去绑定组件再赋值了,优点是更简洁易维护(Jetpack 其它组件都完美支持 DataBinding),而且也减少了内存泄露和空指针的风险...如何使用 DataBinding 库 ?...还可以和 LiveData 完美结合,我们可以看到 MainViewModel 中的 name 变量是 LiveData 类型,让我们更进一步,为 binding 添加 LifecycleOwner...,但如果用传统方式去实现的话 Activity 中至少有 100 行以上代码,而 DataBinding 让 Activity 变得十分清爽,此外,DataBinding 与 LiveData、ViewModel
DataBinding的原理是通过编写XML布局文件,在其中使用特定的标签和语法,将UI组件和数据模型连接起来。...当布局文件被加载时,DataBinding会自动生成绑定代码,从而将UI组件和数据模型关联起来。 通过学习DataBinding基础知识,可以让你的代码速度翻倍,提高开发效率和代码质量。...plus(1) } } 这里变化了userAge的值后,userInfo也会随着一起变化。 3.3 视图绑定 一般我们使用DataBindingUtil进行视图绑定操作。...DataBinding的时候,的app:age="@{state.user.age}"会编译报错,提示类型不匹配。...layout属性生效,内层属性不生效。
. 2 DataBinding 2.1 坑 要用一个框架那么就要先说它的坑点.那就是不建议在使用DataBinding的模块同时使用apply plugin: 'kotlin-kapt'....kotlin和DataBinding是可以的,但是请一定不要使用kapt,除非JB那帮大佬搞定这些奇怪的问题....是与gradle打包在一起发布的,一般不会出现这种问题,如果你不想用ButterKnife但有不想让DataBinding的风格的写法入侵你的xml太狠的话,只使用android:id将会是一个不错的选择...:这种三元运算符 //那就照顾不到你了 2.5 反向绑定 有正向绑定就一定有反向绑定,正向绑定和反向绑定一起构成了双向绑定....查看源码得知,他就是一个空接口,不包含任何实现,但是若我们想使用,还是得继承此接口。
三、结合 LiveData DataBinding 还有个妙处在于:可以结合 LiveData 使用。...不用侵入式的修改数据实体类了,直接使用LiveData,同样支持DataBinding的数据绑定!...DataBinding 结合 LiveData 使用步骤很简单: 要使用LiveData对象作为数据绑定来源,需要设置LifecycleOwner xml中 定义变量 ViewModel, 并使用 ViewModel...六、ViewModel 和 Repository 之间,建议 使用 LiveData 进行通信,就像 View 和 ViewModel 之间那样 使用回调的话,可能会有内存泄漏的风险。...在技术学习的道路上,我们一起前进!
一、ViewModel + LiveData + DataBinding 核心要点 1、ViewModel 使用要点 ViewModel 架构组件 是 视图 View 与 数据模型 Model 之间 数据交互的...结合使用时 , 在 DataBinding 布局中设置的就是该 视图模型 类对象 ; 该 ViewModel 类中 , 还 使用了 LiveData , 可以实时监听数据改变 , 以更新界面 UI 组件...的观察者 , 如果不设置该项 , LiveData 发生数据改变后 , 则 不会通知 UI 组件进行数据更新 ; Activity 组件继承了 AppCompatActivity , AppCompatActivity...DataBinding + ViewModel + LiveData 组合用法 ; DataBinding 使用核心要点 : 首先 , 启用 DataBinding , 在 build.gradle...组合使用 , 在最后为 LiveData 设置观察者 , 实现了 DataBinding + ViewModel + LiveData 组合使用 ; // 1.
主要使用LiveData,ViewModel,DataBinding打造MVVM框架,其他组件是附加的功能。...6、DataBinding:不与LifeCycle和ViewModel使用,只是实现数据绑定,可单向也可双向。...要使用Databinding那应该是使用DataBinding+ViewModel+LiveData,三者缺一不可。...DataBinding设置的对象变量在于视图View控件绑定后,变量改变了则视图View控件的值也会一起变,有点类似LiveData监听了。...这个模式数据取代了,并且 // 如果使用livedata则会返回一个新的对象,原livedata监听的对象就会监听到一个null对象。
现如今,我们可以直接在组件内部 点到为止 地监听 LifecycleOwner 的状态,从而规避这种不恰当的使用。 2....对上述状况不理解的,可具体参考我在 《LiveData 鲜为人知的 身世背景 和 独特使命》 中提供的 播放器状态全局通知 的案例 LiveData 为什么能解决上述这些问题?...因此,对于 作用域共享 和 视图重建 的情况,状态因完好地被保留,而得以被视图控制器在恢复时直接使用。...换言之,在使用 DataBinding 后,唯一的改变是,你无需手工调用视图来 set 新状态,你只需 set 数据本身。...它们的存在 大都是为了 在软件工程的背景下 解决一致性的问题、将容易出错的操作在后台封装好,方便使用者快速、稳定、不产生预期外错误地编码。 这样说,你理解了吗??
同时Activity和Fragment内部均内置了Lifecycle,使用非常简单,以1.1 案例通过Lifecycle改造后如下: class VideoPlayer : LifecycleObserver...答案显而易见,无非是想让数据使用者感知到而已,而LiveData可以优雅的实现这一流程,将 改变、通知 两步操作合并为一步 即省事也提高了安全性....解除你对DataBinding的误解 4.1 使用DataBinding的作用有哪些?...DataBinding最大的优点跟唯一的作用就是数据 UI双向绑定,UI和数据修改任何一方另外一方都会自动同步,这样的好处其实跟LiveData的类似,都是做数据跟UI同步操作,用来保证数据和UI一致性...其实写到这可以发现,不管是LiveData、DataBinding还是DiffUtil都是用来解决数据和UI一致性问题,可见Google对这方面有多么重视,所以我们一定要紧跟官方步伐 小知识点: DataBinding
解除你对DataBinding的误解 4.1 使用DataBinding的好处有哪些? 4.2 为什么很多人说DataBinding很难调试? 5. Jetpack和MVVM有什么关系?...保证不丢失,二者搭配简直是天作之合。...解除你对DataBinding的误解 4.1 使用DataBinding的作用有哪些?...DataBinding最大的优点跟唯一的作用就是数据 UI双向绑定,UI和数据修改任何一方另外一方都会自动同步,这样的好处其实跟LiveData的类似,都是做数据跟UI同步操作,用来保证数据和UI一致性...其实写到这可以发现,不管是LiveData、DataBinding还是DiffUtil都是用来解决数据和UI一致性问题,可见Google对这方面有多么重视,所以我们一定要紧跟官方步伐 小知识点: DataBinding
同时Activity和Fragment内部均内置了Lifecycle,使用非常简单,以1.1 案例通过Lifecycle改造后如下: class VideoPlayer : LifecycleObserver...答案显而易见,无非是想让数据使用者感知到而已,而LiveData可以优雅的实现这一流程,将 改变、通知 两步操作合并为一步 即省事也提高了安全性....的误解 使用DataBinding的作用有哪些?...DataBinding最大的优点跟唯一的作用就是数据 UI双向绑定,UI和数据修改任何一方另外一方都会自动同步,这样的好处其实跟LiveData的类似,都是做数据跟UI同步操作,用来保证数据和UI一致性...其实写到这可以发现,不管是LiveData、DataBinding还是DiffUtil都是用来解决数据和UI一致性问题,可见Google对这方面有多么重视,所以我们一定要紧跟官方步伐 小知识点: DataBinding
是 Paging3 当中重要成员 ) 使用 Data Mapper 分离数据源 和 UI Kotlin Flow 结合 Retrofit2 + Room 的混合使用 Kotlin Flow 与 LiveData...的使用 使用 Coil 加载图片 使用 ViewModel、LiveData、DataBinding 协同工作 使用 Motionlayout 做动画 App Startup 与 Hilt 的使用 增加...Flow 以及如何与 LiveData 一起使用,当我看完并通过实践之后大概明白了,LiveData 是一个生命周期感知组件,它并不属于 Repositories 或者 DataSource 层,下文会有详细的分析...PokemonGo 项目中使用了 DataBinding 进行的数据绑定。...,在技术的道路上一起前进。
MVVM的双向数据绑定主要通过DataBinding实现,不过相信有很多人跟我一样,是不喜欢用DataBinding的,这样架构就变成了下面这样。...MVVM的双向数据绑定主要通过DataBinding实现,但有很多人(比如我)不喜欢用DataBinding,而是View通过LiveData等观察ViewModle的数据变化并自我更新,这其实是单一数据源而不是双向数据绑定...的形式通知Model Model基于Intent更新State View接收到State变化刷新UI 数据永远在一个环形结构中单向流动,不能反向流动: 图片 上面简单的介绍了下MVI架构,下面我们一起来看下具体是怎么使用...通过ViewModel暴露的方法交互,比较零乱难以维护 而MVI可以比较好的解决以上痛点,它主要有以下优势: 强调数据单向流动,很容易对状态变化进行跟踪和回溯 使用ViewState对State集中管理...但通过以上的分析与介绍,我相信使用MVI架构代替没有使用DataBinding的MVVM是一个比较好的选择~
MVVM的双向数据绑定主要通过DataBinding实现,但有很多人(比如我)不喜欢用DataBinding,而是View通过LiveData等观察ViewModle的数据变化并自我更新,这其实是单一数据源而不是双向数据绑定...其次就是View层通过调用ViewModel层的方法来交互的,View层与ViewModel的交互比较分散,不成体系 小结一下,在我的使用中,MVVM架构主要有以下不足 为保证对外暴露的LiveData...数据永远在一个环形结构中单向流动,不能反向流动: [1240] 上面简单的介绍了下MVI架构,下面我们一起来看下具体是怎么使用MVI架构的 MVI架构实战 --------- 总体架构图 [1240...ViewModel暴露的方法交互,比较零乱难以维护 而MVI可以比较好的解决以上痛点,它主要有以下优势 强调数据单向流动,很容易对状态变化进行跟踪和回溯 使用ViewState对State集中管理,只需要订阅一个...但通过以上的分析与介绍,我相信使用MVI架构代替没有使用DataBinding的MVVM是一个比较好的选择~ 相关视频推荐: 【2021最新版】Android studio安装教程+Android(安卓
MVVM 模式将应用程序的 UI 逻辑和业务逻辑分离,使用 LiveData、ViewModel 和 DataBinding 可以使代码更加模块化和可维护。...ViewModel 层:作为数据和 UI 的桥梁,负责预处理数据,使之适合 UI 显示。使用 LiveData 来观察数据变化。...View 层 使用 DataBinding 在布局文件中实现 UI: 使用 LiveData 和 MutableLiveData 来观察数据变化。 3、 View 层: 使用 DataBinding 进行数据绑定。...优点 分离关注点:UI 和业务逻辑分离,增加代码的模块化和可维护性。 双向数据绑定:通过 DataBinding 实现双向数据绑定,减少手动更新 UI。
大多结合具有生命周期的组件一起使用(如 Activity、Fragment 或 Service,或实现了 LifecycleOwner 接口的对象)。...重写了 LiveData 的 onActive 和 onInactive 方法统一去添加和移除它内部 LiveData 的 Observer 自定义LiveData 除了使用库里提供的 MutableLiveData...LiveData 结合 ViewModel 使用 前面介绍 LiveData 的使用时都是直接在Activity里使用的,但是真实开发场景中我们一般不直接在 Activity / Fragment 中使用而是在...结合 DataBinding 使用 接下来看看 LiveData 结合 DataBinding 的使用,还是上面使用的 MainViewModel : java: ActivityMainBinding...关于 DataBinding 的详细介绍请参考 Jetpack 之 DataBinding 原理 前面介绍了 LiveData 的使用,接下来看看 LiveData 内部是怎么实现只在生命周期活跃状态下回调观察者的观察方法的
所以,这篇尽量讲清楚 开发架构模式和MVVM的本质,使得有一种 “哦,原来如此” 的豁然开朗。 注意,本篇完全 不会提 DataBinding、双向绑定,文末会解释为啥不提。 一、开发架构 是什么?...易于使用、维护性好 提高开发效率 架构模式最终都是 服务于开发者。如果代码职责和逻辑混乱,维护成本就会相应地上升。...MVVM 的本质是 数据驱动,把解耦做的更彻底,viewModel不持有view 。...LiveData 组件还遵循应用组件(如 Activity、Fragment 和 Service)的生命周期状态,并包括清理逻辑以防止对象泄漏和过多的内存消耗。...这样一来,对数据库的更改将触发对活跃 LiveData 对象的回调。数据库会充当单一可信来源。 保留尽可能多的相关数据和最新数据。这样,即使用户的设备处于离线模式,他们也可以使用您应用的功能。
Android MVVM框架搭建(一)ViewModel + LiveData + DataBinding 前言 正文 一、创建项目 二、ViewModel使用 ① 绑定Activity ② 页面布局绘制...③ 实现登录 二、LiveData使用 ① 可修改数据 ② 数据观察 三、DataBinding使用 ① 单向绑定 ② 双向绑定 四、源码 前言 MVVM框架出来已经有一段时间了,现在也有很多的项目运用了...ViewModel:关联层,将Model和View进行绑定,只做和业务逻辑相关的工作,不涉及任何和UI相关的操作,不持有控件引用,不更新UI。...View只做和UI相关的工作,不涉及任何业务逻辑,不涉及操作数据,不处理数据。UI和数据严格的分开。...二、LiveData使用 LiveData是用来做什么的?
从这里开始,就会发现和我们之前的写法有很大的区别了,之前的xml文件根节点是LinearLayout或者RelativeLayout等布局,但是在使用...DataBinding后,我们的xml文件可以概括成这样: DataBinding中提供的一个类,它使我们的对象变得可观测,即修改界面上的值,对应的loginName和loginPass的值就会改变,反之亦然。...再看mOpenUserList与mSnackbarText,它们是LiveData类型的,LiveData是一个数据持有类,并且在给定的生命周期中其变化是可观测的,这里用来处理ViewModels与 UI...login()方法由点击登录按钮后触发,这里注意,因为loginName和loginPass已经与我们的视图文件绑定在一起了,所以就不用在调用的时候从EditText获取文本内容再传进来了。
领取专属 10元无门槛券
手把手带您无忧上云