Google Data Binding Library 谷歌官方数据绑定库(四) 语法和运算符

来源:互联网 发布:无线网卡安装后无网络 编辑:程序博客网 时间:2024/06/07 03:57

本文为菜鸟学习笔记兼翻译练习用,翻译可能会不准确,细节请以原文为准,如有不足之处还请见谅,若能斧正,小弟不胜感激。原文地址:Google Data Binding Library

语法和运算符

(和Java的)通用特性(Common Features)

下边的语法和运算符和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):?

举个栗子:

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

不支持的关键字操作

下列Java中的关键字操作是不支持的:

  • this
  • super
  • new
  • 通用的显式调用(Explicit generic invocation)

空引用合并(Null Coalescing Operator)

空引用合并运算符(??),当左边的值不为空,取左边的值;左边的值为空时取右边的值。

android:text="@{user.displayName ?? user.lastName}"

在功能上这段等同于:

android:text="@{user.displayName != null ? user.displayName : user.lastName}"

属性引用

在第一篇第一个数据绑定表达式中,我们已经讨论过:简式的JavaBean引用。当一个表达式引用一个类的属性时,它使用相同格式的字段,getter,和可观察的字段(ObservableFiedlds)。

android:text="@{user.lastName}"

避免空指针

自动创建的数据绑定代码会检查空指针和避免空指针错误。例如, 在表达式@{user.name}中,如果user为空,user.name会分配其默认值(null)。如果你使用user.age, 如果age字段是int型, 则这里获得的值是默认值0。

集合

通用的集合有:arrays,lists,sparse lists和maps,可以通过[]运算符便利的访问:

<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]}"

字符串常量

如果使用单引号,使用双引号在表达式中更显便利:

android:text='@{map["firstName"]}'

也可以用双引号环绕属性值。当这样做时,字符串常量使用" ' "或" ` ":

android:text="@{map[`firstName`}"android:text="@{map['firstName']}"

资源访问

使用通用的语法也可以将资源文件作为表达式的一部分:

android:padding="@{large? @dimen/largePadding : @dimen/smallPadding}"

格式字符串和复数也可以通过提供参数估值:

android:text="@{@string/nameFormat(firstName, lastName)}"android:text="@{@plurals/banana(bananaCount)}"

当一个复数携带多个参数时,所有的参数都要传递:

    Have an orange  Have %d oranges android:text="@{@plurals/orange(orangeCount, orangeCount)}"

一些资源需要显示类型估值:

TypeNormal ReferenceExpression ReferenceString[]@array@stringArrayint[]@array@intArrayTypedArray@array@typedArrayAnimator@animator@animatorStateListAnimator@animator@stateListAnimatorcolor int
@color@colorColorStateList@color@colorStateList

这一片内容比较多,下一篇从Data Objects开始翻译。


阅读全文
0 0
原创粉丝点击