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

DataBinding和LiveData搞在一起了

最近在工作中在一个页面使用了 DataBinding ,实践了一下 Databinding 和 LiveData 的结合。今天就来分享一下具体的内容。...本篇文章适合对 Databinding 及 LiveData 有过了解(阅读过文档即可),阅读时间约 20 分钟 在过完 Databinding 文档的时候,首先看到了利用 Observable 接口的子类来实现使用可观察数据对象...但是 Observable 对象毕竟是不可以与生命周期绑定的,数据监听我们还是比较希望能使用 LiveData去做。当然后面官方也提供了和 LiveData 结合的使用方式。...总结 到这里,我们就翻了一遍源码,弄清楚了 DataBinding 是怎么工作的,又是如何和 LiveData 相结合,绑定上生命周期的。...继续思考一下使用了 DataBinding 之后的代码写法: View 只负责 UI 的处理和绑定 ViewModel 里面存储了数据,或者说是状态。

1.6K10

Android Jetpack | DataBinding

DataBinding 是属于 Jetpack 的一个支持库,可以让你以在布局中声明属性的方式替代编码方式将布局中的 UI 组件和应用数据进行绑定 通常我们让控件和数据交互的方式如下面的代码,调用 findViewById...}" /> 这样你就不用在 Activity 中调用 UI 框架去绑定组件再赋值了,优点是更简洁易维护(Jetpack 其它组件都完美支持 DataBinding),而且也减少了内存泄露和空指针的风险...如何使用 DataBinding 库 ?...还可以和 LiveData 完美结合,我们可以看到 MainViewModel 中的 name 变量是 LiveData 类型,让我们更进一步,为 binding 添加 LifecycleOwner...,但如果用传统方式去实现的话 Activity 中至少有 100 行以上代码,而 DataBinding 让 Activity 变得十分清爽,此外,DataBinding 与 LiveData、ViewModel

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

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

    . 2 DataBinding 2.1 坑 要用一个框架那么就要先说它的坑点.那就是不建议在使用DataBinding的模块同时使用apply plugin: 'kotlin-kapt'....kotlin和DataBinding是可以的,但是请一定不要使用kapt,除非JB那帮大佬搞定这些奇怪的问题....是与gradle打包在一起发布的,一般不会出现这种问题,如果你不想用ButterKnife但有不想让DataBinding的风格的写法入侵你的xml太狠的话,只使用android:id将会是一个不错的选择...:这种三元运算符 //那就照顾不到你了 2.5 反向绑定 有正向绑定就一定有反向绑定,正向绑定和反向绑定一起构成了双向绑定....查看源码得知,他就是一个空接口,不包含任何实现,但是若我们想使用,还是得继承此接口。

    3.9K01

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

    一、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.

    1.6K20

    让人耳目一新的 Jetpack MVVM 精讲!

    现如今,我们可以直接在组件内部 点到为止 地监听 LifecycleOwner 的状态,从而规避这种不恰当的使用。 2....对上述状况不理解的,可具体参考我在 《LiveData 鲜为人知的 身世背景 和 独特使命》 中提供的 播放器状态全局通知 的案例 LiveData 为什么能解决上述这些问题?...因此,对于 作用域共享 和 视图重建 的情况,状态因完好地被保留,而得以被视图控制器在恢复时直接使用。...换言之,在使用 DataBinding 后,唯一的改变是,你无需手工调用视图来 set 新状态,你只需 set 数据本身。...它们的存在 大都是为了 在软件工程的背景下 解决一致性的问题、将容易出错的操作在后台封装好,方便使用者快速、稳定、不产生预期外错误地编码。 这样说,你理解了吗??

    99320

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

    同时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

    1.9K80

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

    解除你对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

    84300

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

    同时Activity和Fragment内部均内置了Lifecycle,使用非常简单,以1.1 案例通过Lifecycle改造后如下: class VideoPlayer : LifecycleObserver...答案显而易见,无非是想让数据使用者感知到而已,而LiveData可以优雅的实现这一流程,将 改变、通知 两步操作合并为一步 即省事也提高了安全性....的误解 使用DataBinding的作用有哪些?...DataBinding最大的优点跟唯一的作用就是数据 UI双向绑定,UI和数据修改任何一方另外一方都会自动同步,这样的好处其实跟LiveData的类似,都是做数据跟UI同步操作,用来保证数据和UI一致性...其实写到这可以发现,不管是LiveData、DataBinding还是DiffUtil都是用来解决数据和UI一致性问题,可见Google对这方面有多么重视,所以我们一定要紧跟官方步伐 小知识点: DataBinding

    1K31

    MVI 架构

    MVVM的双向数据绑定主要通过DataBinding实现,不过相信有很多人跟我一样,是不喜欢用DataBinding的,这样架构就变成了下面这样。...MVVM的双向数据绑定主要通过DataBinding实现,但有很多人(比如我)不喜欢用DataBinding,而是View通过LiveData等观察ViewModle的数据变化并自我更新,这其实是单一数据源而不是双向数据绑定...的形式通知Model Model基于Intent更新State View接收到State变化刷新UI 数据永远在一个环形结构中单向流动,不能反向流动: 图片 上面简单的介绍了下MVI架构,下面我们一起来看下具体是怎么使用...通过ViewModel暴露的方法交互,比较零乱难以维护 而MVI可以比较好的解决以上痛点,它主要有以下优势: 强调数据单向流动,很容易对状态变化进行跟踪和回溯 使用ViewState对State集中管理...但通过以上的分析与介绍,我相信使用MVI架构代替没有使用DataBinding的MVVM是一个比较好的选择~

    5410

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

    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(安卓

    2.1K20

    Jetpack之LiveData详解

    大多结合具有生命周期的组件一起使用(如 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 内部是怎么实现只在生命周期活跃状态下回调观察者的观察方法的

    1.7K20

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

    所以,这篇尽量讲清楚 开发架构模式和MVVM的本质,使得有一种 “哦,原来如此” 的豁然开朗。 注意,本篇完全 不会提 DataBinding、双向绑定,文末会解释为啥不提。 一、开发架构 是什么?...易于使用、维护性好 提高开发效率 架构模式最终都是 服务于开发者。如果代码职责和逻辑混乱,维护成本就会相应地上升。...MVVM 的本质是 数据驱动,把解耦做的更彻底,viewModel不持有view 。...LiveData 组件还遵循应用组件(如 Activity、Fragment 和 Service)的生命周期状态,并包括清理逻辑以防止对象泄漏和过多的内存消耗。...这样一来,对数据库的更改将触发对活跃 LiveData 对象的回调。数据库会充当单一可信来源。 保留尽可能多的相关数据和最新数据。这样,即使用户的设备处于离线模式,他们也可以使用您应用的功能。

    2.1K20

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

    Android MVVM框架搭建(一)ViewModel + LiveData + DataBinding 前言 正文 一、创建项目 二、ViewModel使用 ① 绑定Activity ② 页面布局绘制...③ 实现登录 二、LiveData使用 ① 可修改数据 ② 数据观察 三、DataBinding使用 ① 单向绑定 ② 双向绑定 四、源码 前言   MVVM框架出来已经有一段时间了,现在也有很多的项目运用了...ViewModel:关联层,将Model和View进行绑定,只做和业务逻辑相关的工作,不涉及任何和UI相关的操作,不持有控件引用,不更新UI。...View只做和UI相关的工作,不涉及任何业务逻辑,不涉及操作数据,不处理数据。UI和数据严格的分开。...二、LiveData使用   LiveData是用来做什么的?

    17.1K97

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

    Android MVVM框架搭建(一)ViewModel + LiveData + DataBinding 前言 正文 一、创建项目 二、ViewModel使用 ① 绑定Activity ② 页面布局绘制...③ 实现登录 二、LiveData使用 ① 可修改数据 ② 数据观察 三、DataBinding使用 ① 单向绑定 ② 双向绑定 四、源码 前言   MVVM框架出来已经有一段时间了,现在也有很多的项目运用了...ViewModel:关联层,将Model和View进行绑定,只做和业务逻辑相关的工作,不涉及任何和UI相关的操作,不持有控件引用,不更新UI。...View只做和UI相关的工作,不涉及任何业务逻辑,不涉及操作数据,不处理数据。UI和数据严格的分开。...二、LiveData使用   LiveData是用来做什么的?

    2.7K32

    MVVM项目实战之路-搭建一个登录界面

    从这里开始,就会发现和我们之前的写法有很大的区别了,之前的xml文件根节点是LinearLayout或者RelativeLayout等布局,但是在使用...DataBinding后,我们的xml文件可以概括成这样: DataBinding中提供的一个类,它使我们的对象变得可观测,即修改界面上的值,对应的loginName和loginPass的值就会改变,反之亦然。...再看mOpenUserList与mSnackbarText,它们是LiveData类型的,LiveData是一个数据持有类,并且在给定的生命周期中其变化是可观测的,这里用来处理ViewModels与 UI...login()方法由点击登录按钮后触发,这里注意,因为loginName和loginPass已经与我们的视图文件绑定在一起了,所以就不用在调用的时候从EditText获取文本内容再传进来了。

    2.2K70
    领券