本文接《Android中的Data Binding初探 (一)》
数据绑定用法
- import语法
xml
<data> <import type="android.view.View"/> </data>
- 如果类名相同,可以起别名
xml
<import type="android.view.View"/> <import type="com.example.real.estate.View" alias="Vista"/>
- import集合类型
xml
<data> <import type="com.example.User"/> <import type="java.util.List"/> <variable name="user" type="User"/> <variable name="userList" type="List<User>"/> </data>
- 使用类静态方法
xml
<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"/>
- 传递数据到Include layout
xml
<?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>
绑定表达式语法
绑定表达式里的语法,基本上与Java语言里的相同
* 支持语法
java
Mathematical + - / * % String concatenation + Logical && || Binary & | ^ Unary + - ! ~ Shift >> >>> << Comparison == > < >= <= instanceof Grouping () Literals - character, String, numeric, null Cast Method calls Field access Array access [] Ternary operator ?:
- 不支持语法
java
this super new
空指针处理
表达式不会抛出空指针异常,对于空指针的访问都返回的是null,比如表达式@{user.name},
user是null,访问user.name返回的也是null,不会抛出空指针异常Null Coalescing操作符
Null Coalescing操作符(??)会根据左右两侧是否是null进行选择,
如果左侧的不为null,则选择左侧,为null选择右侧:
xml
android:text="@{user.displayName ?? user.lastName}"
等同于:
xml
android:text="@{user.displayName != null ? user.displayName : user.lastName}"
- 访问集合类型
集合类型中的元素可以使用[]符号来访问
xml
<data> <import type="android.util.SparseArray"/> <import type="java.util.Map"/> <import type="java.util.List"/> <variable name="list" type="List<String>"/> <variable name="sparse" type="SparseArray<String>"/> <variable name="map" type="Map<String, String>"/> <variable name="index" type="int"/> <variable name="key" type="String"/> </data> … android:text="@{list[index]}" … android:text="@{sparse[index]}" … android:text="@{map[key]}"
- 访问Resource
xml
android:padding="@{large? @dimen/largePadding : @dimen/smallPadding}" android:text="@{@string/nameFormat(firstName, lastName)}" android:text="@{@plurals/banana(bananaCount)}"
本文参考谷歌官方的Data Binding Guide
本文作者: 阳春面
原文地址:http://www.aswifter.com/2015/07/08/android-data-binding-2/
欢迎关注我的微信公众号,分享Android 开发,IOS开发,Swift开发和互联网内容
微信号:APP开发者
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。