DataBinding系列三、表达式
来源:互联网 发布:iphone软件开发教程 编辑:程序博客网 时间:2024/05/16 10:38
使用数据绑定的布局文件中,对属性赋值的是表达式,这样可以在绑定时执行特定代码,减少工作量。表达式是有特殊语法的。
Imports
导入功能,和java中的import功能一样,导入之后就能使用类的静态属性和方法了,也可以用来定义对像。
其中 java.lang.* 是默认被导入了。
语法是:
<data>
<importtype="xxx.xxx.xx"alias="other_name"/>
</data>
例如:
<data>
<!-- 导入View类,后面使用 -->
<importtype="android.view.View" />
<variable
name="user"
type="com.heyy.databindingexample.User" />
</data>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
android:visibility="@{View.VISIBLE}" />
Variables
变量或者对像,定义后可以访问它的方法或属性,之前已经使用过了。但是有一些要注意的地方:
1.默认定义了一个context变量,它的值是view.getContext(),如果自己再定义一个叫context变量就会覆盖它。
2.为不同配置(例如landscape / portrait)定义的多个布局文件里面的varianble会自动合并。
3.databing会为每个varianble生成一对getter/setter,当没有设置数据时,variable提供的属性是默认值。
4.data binding会自动检查表达式中variable为空的情况,比如user为空时,user.displayName会返回null。
操作符
目前支持以下操作
Mathematical + - / * %
String concatenation +
Logical && ||
Binary & | ^
Unary + - ! ~
Shift >> >>> <<
Comparison == > < >= <=
instanceof
Grouping ()
Literals - character, String, numeric, null
Cast
Method calls
Field access
Array access []
Ternary operator ?:
举个栗子:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
android:visibility="@{user.age>=18?View.VISIBLE:View.GONE}" />
不支持以下操作
this
super
new
Explicit generic invocation
空操作符??
android:text="@{user.displayName ?? user.lastName}"
当user.displayName不为空时返回 user.displayName,否则返回user.lastName
集合操作符[]
像arrays, lists, sparse lists, maps等集合类,需要使用[]操作符来访问里面的元素,例如
<layoutxmlns:android="http://schemas.android.com/apk/res/android">
<data>
<importtype="java.util.List" />
<variablename="list"type="List" />
</data>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{list[0]}" />
</layout>
字符串
表达式中的字符串的引号要特殊处理,几种可用的格式是:
android:text='@{map["firstName"]}'
android:text="@{map[`firstName`}"
android:text="@{map['firstName']}"
android:text="@{map["firstName"]}"
- DataBinding系列三、表达式
- DataBinding系列(三):RecyclerView中使用DataBinding
- silverlight系列(DataBinding、DataGrid)
- DataBinding系列五、XXXBinding
- DataBinding系列(一):DataBinding初认识
- DataBinding学习(三)
- Android DataBinding (三) Observable
- ES2015系列(三) 正则表达式
- DataBinding系列四、数据更新
- DataBinding的基本使用(三)
- DataBinding 学习系列(4)DataBinding的高级功能
- DataBinding系列(二):DataBinding的基本用法
- DataBinding系列(四):DataBinding进阶之路
- 正则表达式从零开始学习系列(三)
- DataBinding
- DataBinding
- DataBinding
- DataBinding
- Handler消息处理机制
- [FUNC]AutoHotkey提示信息,只显示彩色文字 比如红色文字
- pwnhub——胖哈勃外传-第一集 writeup
- Spring Bean的生命周期
- 图像检索服务器编写问题记录——线程中信号的处理方式思考
- DataBinding系列三、表达式
- sqlserver各种注释语句的写法
- 利用excel分析IIS服务器日志
- [LeetCode] 22. Generate Parentheses
- [Android N]MediaRecorder系列之mediaRecorder与StagefrightRecorder
- iOS:Github上的开源项目集合
- 根据GPS经纬度坐标计算两点的距离算法
- Mybatis3.2.1整合Spring3.1
- [几何]计算不规则多边形的面积、中心、重心