DataBingding个人使用很久了,觉得很好用且方便,让自己的代码更加简单且少,读取来更有可读性。建议还未入手的赶紧用起来,真的是方便快捷简单。常规用法很简单,我将使用中需要注意的地方进行一下总结和归纳。本篇文章适合DataBinding的进阶和扩展学习。DataBinding的基础学习地址为:DataBinding中文官方文档
使用注意细节
虽然DataBinding使用简单,但是还有些需要注意的地方,我将在下面意义列举出来。
目录fa
背景和使用限制
早在2015谷歌 I/O大会上就已提出DataBinding。如下是2018年google I/O大会,发布的AAC及其他的图。在2019的I/O 大会中AAC 有了新的趋势和改变CameraX、SavedState for ViewModel、Jetpack Compose。
数据绑定库既具有灵活性又具有广泛的兼容性—它是一个支持库,因此您可以将其与所有Android平台以及Android 2.1(API级别7+)一起使用。同时要满足Android Gradle 1.5.0-alpha1或更高版本的插件。
DataBinDing的优点
1.再也不需要编写findViewById了,比butterknife好用多了
2.实时监测数据,自动刷新控件显示
dataBinding的本身是对View层状态的一种观察者模式的实现。DataBinding采用了观察者模式,双向binding的使用需要防止死循环造成ANR,解决方案是需要判断前后两次的值是否一样。
针对每个Activity或者Fragment的布局,在编译阶段,会自动生成一个ViewDataBinding类的对象,该对象持有Activity要展示的数据和布局中的各个view的引用。同时还有如下优势:将数据分解到各个view、在UI线程上更新数据、监控数据的变化,实时更新,这样一来,你要展示的数据已经和展示它的布局紧紧绑定在了一起。
如何配置
首先在module的build.gradle中配置如下
上面的配置满足了Java形式的支持,如果你是需要支持在kotlin中使用Databinding,则需要在module的build.gradle中继续配置
为什么配置了 dataBinding{enabled = true}之后就可以使用dataBinding方式进行开发了?
Android Studio中是依靠gradle来管理项目的,在创建一个项目时,从开始创建一直到创建完毕,整个过程是需要执行很多个gradle task的,这些task有很多是系统预先帮我们定义好的,比如build task,clean task等,DataBinding相关的task也是系统预先帮我们定义好的,但是默认情况下,DataBinding相关的task在task列表中是没有的,因为我们没有开启dataBinding,但是一旦我们通过 dataBinding{enabled = true}的方式开启DataBinding之后,DataBinding相关的task就会出现在task列表中,每当我们执行编译之类的操作时,就会执行这些dataBinding Task, 这些task的作用就是检查并生成相关dataBinding代码,比如dataBindingExportBuildInfoDebug这个task就是用来导出debug模式下的build信息的。
ActivityMainBinding这个类从哪来的?
通过第一个问题的解释,我们也就知道了ActivityMainBinding这个类其实是系统帮我们自动生成的。
但是如果你在实际编写代码的过程中,你会发现并没有执行编译、运行之类等操作,ActivityMainBinding这个类就直接能用了,竟然还有这种操作?其实是Android Studio 这个IDE自动帮我们做了这一步,在默认情况下,系统会使用Android Studio为我们自动生成databinding相关的代码,但是这种方式生成的代码不能调试,如果你想通过点击ActivityMainBinding跳转到它的源码中,你会发现并不能如你所愿,而是会跳转到对应的布局文件中。那么如果我们确实要查看ActivityMainBinding的源码并且还想调试,我们就需要通过另外一种方式:手动编译代码。这两种方式可以通过Android Studio的设置面板修改。
符号转义
在我们使用过程中,有些地方是需要使用转义字符的,如:
这样会报编译错误,我们需要将<>进行转义表示
显示结果 | 描述 | 转义字符 | 十进制 |
---|---|---|---|
空格 |  ; |  ; | |
< | 小于号 | <; | <; |
> | 大于号 | >; | >; |
& | 与号 | &; | &; |
" | 引号 | "; | "; |
‘ | 撇号 | &apos; | '; |
× | 乘号 | ×; | ×; |
÷ | 除号 | ÷; | ÷; |
与DataBinding技术类似的方法还有ViewBinding、Rxbinding。
`该篇博客纯属个人观点和见解,如有错误恳请留言指正,万分感激!`