文章目录
  1. 1. IMPORT
    1. 1.1. 支持 import 功能,且支持别名
    2. 1.2. 导入的类型还可以在表达式中使用 static 属性和方法
  2. 2. 自定义 Binding 类名称
  3. 3. Includes
  4. 4. 表达式

前面两篇文章介绍了 Android 官方 DataBinding 的使用,我们已经可以实现数据的和控件的绑定以及数据的实时更新和事件处理。本文将介绍 DataBinding 的一些其他的特性。

IMPORT

支持 import 功能,且支持别名

代码如下:

1
2
3
<import type="android.view.View"/>
<import type="com.example.real.estate.View"
alias="Vista"/>

导入的类型还可以在表达式中使用 static 属性和方法

代码如下:

1
2
3
4
5
6
7
8
<data>
<import type="com.example.MyStringUtils"/>
<variable name="user" type="com.example.User"/>
</data>
<TextView
android:text="@{MyStringUtils.capitalize(user.lastName)}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

跟 Java 中一样,java.lang.*是自动导入的

自定义 Binding 类名称

默认情况下,Binding 类的命名是基于所述 layout 文件的名称,用大写开头,除去下划线()以及()后的第一个字母大写,然后添加“Binding”后缀。这个类将被放置在一个模块封装包里的databinding封装包下。例如,所述 layout 文件 contact_item.xml 将生成 ContactItemBinding 。如果模块包是 com.example.my.app ,那么它将被放置在 com.example.my.app.databinding 。
Binding 类可通过调整 data 元素中的 class 属性来重命名或放置在不同的包中。例如:

1
2
<data class="ContactItem">
</data>

在模块封装包的 databinding 包中会生成名为 ContactItem 的 Binding 类。如果要想让该类生成在不同的包种,你需要添加前缀.,如下:

1
2
<data class=".ContactItem">
</data>

在这个情况下,ContactItem 类直接在模块包种生成。或者你可以提供整个包名:

1
2
<data class="com.example.ContactItem">
</data>

Includes

通过使用 application namespace 以及在属性中的 Variable 名字从容器 layout 中传递 Variables 到一个被包含的 layout :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:bind="http://schemas.android.com/apk/res-auto">
<data>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/name"
bind:user="@{user}"/>
<include layout="@layout/contact"
bind:user="@{user}"/>
</LinearLayout>
</layout>

注意:在 name.xml 以及 contact.xml 两个 layout 文件中必需要有 user variable

表达式

表达式非常好用,能够很大程度上简化你的代码:

  • 数学 + - / * %
  • 字符串连接 +
  • 逻辑 && ||
  • 二进制 & | ^
  • 一元运算 + - ! ~
  • 移位 >> >>> <<
  • 比较 == > < >= <=
  • instanceof
  • 分组 ()
  • null
  • Cast
  • 方法调用
  • 数据访问 []
  • 三元运算 ?:
  • ?? 左边的对象如果它不是 null ,选择左边的对象;或者如果它是 null ,选择右边的对象

    举个🌰:

1
2
3
4
android:text="@{String.valueOf(index + 1)}"
android:visibility="@{age < 13 ? View.GONE : View.VISIBLE}"
android:transitionName='@{"image_" + id}'
android:text="@{user.displayName ?? user.lastName}"

缺少的操作:

1
this super new 显式泛型调用

源码地址https://github.com/jingle1267/DataDindingSample

参考网址: 官方介绍Data Binding Guide


本文地址 http://94275.cn/2016/03/18/Android-DataBinding-Part-Three/ 作者为 Zhenguo

author:Zhenguo
Author: Zhenguo      Blog: 94275.cn/     Email: jinzhenguo1990@gmail.com
I have almost 10 years of application development experience and have a keen interested in the latest emerging technologies. I use my spare time to turn my experience, ideas and love for IT tech into informative articles, tutorials and more in hope to help others and learn more.
文章目录
  1. 1. IMPORT
    1. 1.1. 支持 import 功能,且支持别名
    2. 1.2. 导入的类型还可以在表达式中使用 static 属性和方法
  2. 2. 自定义 Binding 类名称
  3. 3. Includes
  4. 4. 表达式
返回顶部