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
- Google Data Binding Library 谷歌官方数据绑定库(四) 语法和运算符
- Google Data Binding Library 谷歌官方数据绑定库(二) 自定义绑定类名
- Google Data Binding Library 谷歌官方数据绑定库(六)创建的绑定类
- Google Data Binding Library 谷歌官方数据绑定库(一)
- Google Data Binding Library 谷歌官方数据绑定库(七)属性Setter
- Google Data Binding Library 谷歌官方数据绑定库(八)转换
- Google Data Binding Library 谷歌官方数据绑定库(三)在引用布局中使用数据绑定
- Google Data Binding Library 谷歌官方数据绑定库(五) 可观察的数据对象
- Data Binding Library(数据绑定库)
- Data Binding Library(Data Binding库官方指南)
- Android数据绑定库Data Binding Library介绍
- Data Binding Library数据绑定框架
- Data Binding Library(数据绑定库)--来自android官网的翻译
- Silverlight3系列(四)数据绑定 Data Binding(转)
- 数据绑定(Data Binding)
- 数据绑定(data binding)
- 数据绑定数据库详解Android Data Binding Library
- Android 官方数据绑定框架 Data Binding 简单使用
- HTTPS的介绍
- leetcode 21-Merge Two Sorted Lists
- web 面试
- Impala-大数据时代快速SQL引擎
- Android studio 编译报错 Error:null value in entry: outputDirectory=null
- Google Data Binding Library 谷歌官方数据绑定库(四) 语法和运算符
- ionic2/ionic3自由隐藏底部tab栏---让ionic3自己解决!手把手教程
- Mongodb嵌套查询及修改
- 4G网启用的第二年,国外还未普及,在国内竟快被淘汰
- 深度学习实践操作—从小白到大白(零):目录
- Unity远程加载到本地,本地加载到游戏中
- 常用正则表达式
- codeforce 448 B. XK Segments
- Activity生命周期