网站 内容 制作,wordpress 调用数据库,wordpress 后台精简,彩票网站开发dadi163本教程是跟着 Data Binding Guide 学习过程中得出的一些实践经验#xff0c;同时修改了官方教程的一些错误#xff0c;每一个知识点都有对应的源码#xff0c;争取做到实践与理论相结合。 Data Binding 解决了 Android UI 编程中的一个痛点#xff0c;官方原生支持 MVVM 模… 本教程是跟着 Data Binding Guide 学习过程中得出的一些实践经验同时修改了官方教程的一些错误每一个知识点都有对应的源码争取做到实践与理论相结合。 Data Binding 解决了 Android UI 编程中的一个痛点官方原生支持 MVVM 模型可以让我们在不改变既有代码框架的前提下非常容易地使用这些新特性。其实在此之前已经有些第三方的框架RoboAndroid) 可以支持 MVVM 模型无耐由于框架的侵入性太强导致一直没有流行起来。 准备 Android Studio 更新到 1.3 版本 打开 Preferences找到 Appearances Behavior 下的 Updates 选项把 Automatically Check updates for 修改成 Canary Channel。 注意 Data Binding 是一个 support 包因此与 Android M 没什么关系可以不用下载 Android MNC Preview 的 SDK。 新建一个 Project 修改 Project 的 build.gradle为 build script 添加一条依赖Gradle 版本为 1.2.3。
code classlanguage-groovy hljs bash has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;classpath span classhljs-string stylecolor: rgb(0, 136, 0); box-sizing: border-box;com.android.tools.build:gradle:1.2.3/span
classpath span classhljs-string stylecolor: rgb(0, 136, 0); box-sizing: border-box;com.android.databinding:dataBinder:1.0-rc0/span/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/lili stylebox-sizing: border-box; padding: 0px 5px;2/li/ul 为用到 Data Binding 的模块添加插件修改对应的 build.gradle。
code classlanguage-groovy hljs bash has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;apply plugin: span classhljs-string stylecolor: rgb(0, 136, 0); box-sizing: border-box;com.android.databinding/span/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/li/ul 注意 如果 Module 用到的 buildToolsVersion 高于 22.0.1比如 23 rc1那 com.android.databinding:dataBinder 的版本要改为 1.3.0-beta1否则会出现如下错误 基础 工程创建完成后我们通过一个最简单的例子来说明 Data Binding 的基本用法。 布局文件 使用 Data Binding 之后xml的布局文件就不再单纯地展示 UI 元素还需要定义 UI 元素用到的变量。所以它的根节点不再是一个 ViewGroup而是变成了 layout并且新增了一个节点 data。
code classlanguage-xml hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);layout/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);xmlns:android/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);http://schemas.android.com/apk/res/android/span/spanspan classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);data/span/spanspan classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;/span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);data/span/spanspan classhljs-comment stylecolor: rgb(136, 0, 0); box-sizing: border-box;!--原先的根节点Root Element--/spanspan classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);LinearLayout/span/span....span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;/span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);LinearLayout/span/span
span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;/span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);layout/span/span/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/lili stylebox-sizing: border-box; padding: 0px 5px;2/lili stylebox-sizing: border-box; padding: 0px 5px;3/lili stylebox-sizing: border-box; padding: 0px 5px;4/lili stylebox-sizing: border-box; padding: 0px 5px;5/lili stylebox-sizing: border-box; padding: 0px 5px;6/lili stylebox-sizing: border-box; padding: 0px 5px;7/lili stylebox-sizing: border-box; padding: 0px 5px;8/li/ul 要实现 MVVM 的 ViewModel 就需要把数据与UI进行绑定data 节点就为此提供了一个桥梁我们先在 data 中声明一个 variable这个变量会为 UI 元素提供数据例如 TextView 的 android:text然后在 Java 代码中把”后台”数据与这个 variable 进行绑定。 如果要用一个表格来展示用户的基本信息用 Data Binding 应该怎么实现呢 数据对象 添加一个 POJO 类 - User非常简单四个属性以及他们的 getter 和 setter。
code classlanguage-java hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;public/span span classhljs-class stylebox-sizing: border-box;span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;class/span span classhljs-title stylebox-sizing: border-box; color: rgb(102, 0, 102);User/span {/spanspan classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;private/span span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;final/span String firstName;span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;private/span span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;final/span String lastName;span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;private/span String displayName;span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;private/span span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;int/span age;span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;public/span span classhljs-title stylebox-sizing: border-box;User/span(String firstName, String lastName) {span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;this/span.firstName firstName;span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;this/span.lastName lastName;}span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;public/span span classhljs-title stylebox-sizing: border-box;User/span(String firstName, String lastName, span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;int/span age) {span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;this/span(firstName, lastName);span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;this/span.age age;}span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;public/span span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;int/span span classhljs-title stylebox-sizing: border-box;getAge/span() {span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;return/span age;}span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;public/span String span classhljs-title stylebox-sizing: border-box;getFirstName/span() {span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;return/span firstName;}span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;public/span String span classhljs-title stylebox-sizing: border-box;getLastName/span() {span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;return/span lastName;}span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;public/span String span classhljs-title stylebox-sizing: border-box;getDisplayName/span() {span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;return/span firstName span classhljs-string stylecolor: rgb(0, 136, 0); box-sizing: border-box; /span lastName;}span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;public/span span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;boolean/span span classhljs-title stylebox-sizing: border-box;isAdult/span() {span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;return/span age span classhljs-number stylecolor: rgb(0, 102, 102); box-sizing: border-box;18/span;}
}/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/lili stylebox-sizing: border-box; padding: 0px 5px;2/lili stylebox-sizing: border-box; padding: 0px 5px;3/lili stylebox-sizing: border-box; padding: 0px 5px;4/lili stylebox-sizing: border-box; padding: 0px 5px;5/lili stylebox-sizing: border-box; padding: 0px 5px;6/lili stylebox-sizing: border-box; padding: 0px 5px;7/lili stylebox-sizing: border-box; padding: 0px 5px;8/lili stylebox-sizing: border-box; padding: 0px 5px;9/lili stylebox-sizing: border-box; padding: 0px 5px;10/lili stylebox-sizing: border-box; padding: 0px 5px;11/lili stylebox-sizing: border-box; padding: 0px 5px;12/lili stylebox-sizing: border-box; padding: 0px 5px;13/lili stylebox-sizing: border-box; padding: 0px 5px;14/lili stylebox-sizing: border-box; padding: 0px 5px;15/lili stylebox-sizing: border-box; padding: 0px 5px;16/lili stylebox-sizing: border-box; padding: 0px 5px;17/lili stylebox-sizing: border-box; padding: 0px 5px;18/lili stylebox-sizing: border-box; padding: 0px 5px;19/lili stylebox-sizing: border-box; padding: 0px 5px;20/lili stylebox-sizing: border-box; padding: 0px 5px;21/lili stylebox-sizing: border-box; padding: 0px 5px;22/lili stylebox-sizing: border-box; padding: 0px 5px;23/lili stylebox-sizing: border-box; padding: 0px 5px;24/lili stylebox-sizing: border-box; padding: 0px 5px;25/lili stylebox-sizing: border-box; padding: 0px 5px;26/lili stylebox-sizing: border-box; padding: 0px 5px;27/lili stylebox-sizing: border-box; padding: 0px 5px;28/lili stylebox-sizing: border-box; padding: 0px 5px;29/lili stylebox-sizing: border-box; padding: 0px 5px;30/lili stylebox-sizing: border-box; padding: 0px 5px;31/lili stylebox-sizing: border-box; padding: 0px 5px;32/lili stylebox-sizing: border-box; padding: 0px 5px;33/lili stylebox-sizing: border-box; padding: 0px 5px;34/lili stylebox-sizing: border-box; padding: 0px 5px;35/lili stylebox-sizing: border-box; padding: 0px 5px;36/li/ul 稍后我们会新建一个 User 类型的变量然后把它跟布局文件中声明的变量进行绑定。 定义 Variable 再回到布局文件在 data 节点中声明一个变量 user。
code classlanguage-xml hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);data/span/spanspan classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);variable/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);name/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);user/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);type/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);com.liangfeizc.databindingsamples.basic.User/span //span
span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;/span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);data/span/span/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/lili stylebox-sizing: border-box; padding: 0px 5px;2/lili stylebox-sizing: border-box; padding: 0px 5px;3/li/ul 其中 type 属性就是我们在 Java 文件中定义的 User 类。 当然data 节点也支持 import所以上面的代码可以换一种形式来写。
code classlanguage-xml hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);data/span/spanspan classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);import/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);type/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);com.liangfeizc.databindingsamples.basic.User/span //spanspan classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);variable/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);name/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);user/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);type/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);User/span //span
span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;/span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);data/span/span/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/lili stylebox-sizing: border-box; padding: 0px 5px;2/lili stylebox-sizing: border-box; padding: 0px 5px;3/lili stylebox-sizing: border-box; padding: 0px 5px;4/li/ul 然后我们刚才在 build.gradle 中添加的那个插件 - com.android.databinding会根据xml文件的名称 Generate 一个继承自 ViewDataBinding 的类。 例如这里 xml 的文件名叫 activity_basic.xml那么生成的类就是 ActivityBasicBinding。 注意 java.lang.* 包中的类会被自动导入可以直接使用例如要定义一个 String 类型的变量
code classlanguage-xml hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);variable/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);name/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);firstName/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);type/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);String/span //span/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/li/ul 绑定 Variable 修改 BasicActivity 的 onCreate 方法用 DatabindingUtil.setContentView() 来替换掉 setContentView()然后创建一个 user 对象通过binding.setUser(user) 与 variable 进行绑定。
code classlanguage-java hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;span classhljs-annotation stylecolor: rgb(155, 133, 157); box-sizing: border-box;Override/span
span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;protected/span span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;void/span span classhljs-title stylebox-sizing: border-box;onCreate/span(Bundle savedInstanceState) {span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;super/span.onCreate(savedInstanceState);ActivityBasicBinding binding DataBindingUtil.setContentView(span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;this/span, R.layout.activity_basic);User user span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;new/span User(span classhljs-string stylecolor: rgb(0, 136, 0); box-sizing: border-box;fei/span, span classhljs-string stylecolor: rgb(0, 136, 0); box-sizing: border-box;Liang/span);binding.setUser(user);
}/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/lili stylebox-sizing: border-box; padding: 0px 5px;2/lili stylebox-sizing: border-box; padding: 0px 5px;3/lili stylebox-sizing: border-box; padding: 0px 5px;4/lili stylebox-sizing: border-box; padding: 0px 5px;5/lili stylebox-sizing: border-box; padding: 0px 5px;6/lili stylebox-sizing: border-box; padding: 0px 5px;7/lili stylebox-sizing: border-box; padding: 0px 5px;8/li/ul 注意 ActivityBasicBinding 类是自动生成的所有的 set 方法也是根据 variable 名称生成的。例如我们定义了两个变量。
code classlanguage-xml hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);data/span/spanspan classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);variable/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);name/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);firstName/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);type/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);String/span //spanspan classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);variable/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);name/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);firstName/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);type/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);/span
/span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);data/span/span/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/lili stylebox-sizing: border-box; padding: 0px 5px;2/lili stylebox-sizing: border-box; padding: 0px 5px;3/lili stylebox-sizing: border-box; padding: 0px 5px;4/li/ul 那么就会生成对应的两个 set 方法。
code classlanguage-java hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;setFirstName(String firstName);
setLastName(String lastName);/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/lili stylebox-sizing: border-box; padding: 0px 5px;2/li/ul 使用 Variable 数据与 Variable 绑定之后xml 的 UI 元素就可以直接使用了。
code classlanguage-xml hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);TextView
/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);android:layout_width/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);wrap_content/spanspan classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);android:layout_height/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);wrap_content/spanspan classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);android:text/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);{user.lastName}/span //span/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/lili stylebox-sizing: border-box; padding: 0px 5px;2/lili stylebox-sizing: border-box; padding: 0px 5px;3/lili stylebox-sizing: border-box; padding: 0px 5px;4/li/ul 至此一个简单的数据绑定就完成了可参考完整代码 高级用法 使用类方法 首先为类添加一个静态方法
code classlanguage-java hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;public/span span classhljs-class stylebox-sizing: border-box;span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;class/span span classhljs-title stylebox-sizing: border-box; color: rgb(102, 0, 102);MyStringUtils/span {/spanspan classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;public/span span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;static/span String span classhljs-title stylebox-sizing: border-box;capitalize/span(span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;final/span String word) {span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;if/span (word.length() span classhljs-number stylecolor: rgb(0, 102, 102); box-sizing: border-box;1/span) {span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;return/span String.valueOf(word.charAt(span classhljs-number stylecolor: rgb(0, 102, 102); box-sizing: border-box;0/span)).toUpperCase() word.substring(span classhljs-number stylecolor: rgb(0, 102, 102); box-sizing: border-box;1/span);}span classhljs-keyword stylecolor: rgb(0, 0, 136); box-sizing: border-box;return/span word;}
}/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/lili stylebox-sizing: border-box; padding: 0px 5px;2/lili stylebox-sizing: border-box; padding: 0px 5px;3/lili stylebox-sizing: border-box; padding: 0px 5px;4/lili stylebox-sizing: border-box; padding: 0px 5px;5/lili stylebox-sizing: border-box; padding: 0px 5px;6/lili stylebox-sizing: border-box; padding: 0px 5px;7/lili stylebox-sizing: border-box; padding: 0px 5px;8/li/ul 然后在 xml 的 data 节点中导入
code classlanguage-xml hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);import/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);type/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);com.liangfeizc.databindingsamples.utils.MyStringUtils/span //span/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/li/ul 使用方法与 Java 语法一样
code classlanguage-java hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;TextViewandroid:layout_widthspan classhljs-string stylecolor: rgb(0, 136, 0); box-sizing: border-box;wrap_content/spanandroid:layout_heightspan classhljs-string stylecolor: rgb(0, 136, 0); box-sizing: border-box;wrap_content/spanandroid:textspan classhljs-string stylecolor: rgb(0, 136, 0); box-sizing: border-box;{StringUtils.capitalize(user.firstName)}/span //codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/lili stylebox-sizing: border-box; padding: 0px 5px;2/lili stylebox-sizing: border-box; padding: 0px 5px;3/lili stylebox-sizing: border-box; padding: 0px 5px;4/li/ul 类型别名 如果我们在 data 节点了导入了两个同名的类怎么办
code classlanguage-xml hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);import/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);type/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);com.example.home.data.User/span //span
span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);import/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);type/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);com.examle.detail.data.User/span //span
span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);variable/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);name/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);user/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);type/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);User/span //span/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/lili stylebox-sizing: border-box; padding: 0px 5px;2/lili stylebox-sizing: border-box; padding: 0px 5px;3/li/ul 这样一来出现了两个 User 类那 user 变量要用哪一个呢不用担心import 还有一个 alias 属性。
code classlanguage-xml hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);import/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);type/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);com.example.home.data.User/span //span
span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);import/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);type/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);com.examle.detail.data.User/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);alias/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);DetailUser/span //span
span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);variable/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);name/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);user/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);type/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);DetailUser/span //span/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/lili stylebox-sizing: border-box; padding: 0px 5px;2/lili stylebox-sizing: border-box; padding: 0px 5px;3/li/ul Null Coalescing 运算符
code classlanguage-java hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;android:textspan classhljs-string stylecolor: rgb(0, 136, 0); box-sizing: border-box;{user.displayName ?? user.lastName}/span/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/li/ul 就等价于
code classlanguage-java hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;android:textspan classhljs-string stylecolor: rgb(0, 136, 0); box-sizing: border-box;{user.displayName ! null ? user.displayName : user.lastName}/span/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/li/ul 属性值 通过 ${} 可以直接把 Java 中定义的属性值赋值给 xml 属性。
code classlanguage-xml hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);TextView
/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);android:text/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);{user.lastName}/spanspan classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);android:layout_width/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);wrap_content/spanspan classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);android:layout_height/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);wrap_content/spanspan classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);android:visibility/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);{user.isAdult ? View.VISIBLE : View.GONE}/span//span/codeul classpre-numbering stylebox-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;li stylebox-sizing: border-box; padding: 0px 5px;1/lili stylebox-sizing: border-box; padding: 0px 5px;2/lili stylebox-sizing: border-box; padding: 0px 5px;3/lili stylebox-sizing: border-box; padding: 0px 5px;4/lili stylebox-sizing: border-box; padding: 0px 5px;5/li/ul 使用资源数据 这个例子官方教程有错误可以参考Android Data Binder 的一个bug完整代码在此。
code classlanguage-xml hljs has-numbering styledisplay: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;span classhljs-tag stylecolor: rgb(0, 102, 102); box-sizing: border-box;span classhljs-title stylebox-sizing: border-box; color: rgb(0, 0, 136);TextView
/span span classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);android:padding/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);{large? (int)dimen/largePadding : (int)dimen/smallPadding}/spanspan classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);android:background/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);android:color/black/spanspan classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);android:textColor/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);android:color/white/spanspan classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);android:layout_width/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);wrap_content/spanspan classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);android:layout_height/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);wrap_content/spanspan classhljs-attribute stylebox-sizing: border-box; color: rgb(102, 0, 102);android:text/spanspan classhljs-value stylebox-sizing: border-box; color: rgb(0, 136, 0);string/hello_world/span //span/code