Google Data Binding Library 谷歌官方数据绑定库(八)转换

本文介绍 Data Binding 中的对象转换及自定义转换方法,并演示如何利用这些转换处理不同类型的绑定表达式。此外,还涉及 Android Studio 对 Data Binding 的支持特性。

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

转换

对象转换

当绑定表达式返回一个对象,一个对应的setter会从自动的、重命名的和自定义的setter当中挑选出来。对象会被转换成setter的参数类型。

使用ObservableMap去保存数据十分方便。例如:

<TextView
   android:text='@{userMap["lastName"]}'
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

userMap返回一个对象,这个对象会被自动的转换成 setText(CharSequence)的setter的参数类型。当参数类型比较混乱时,开发者需要在表达式中进行强制转换。

自定义转换

有时特殊类型间需要自动转换。例如,当设置background时:

<View
   android:background="@{isError ? @color/red : @color/white}"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

这里,background使用 Drawable,但是颜色是 integer。当需要一个Drawable得到的返回值却是一个integer时,int型数据需要转换成 ColorDrawable。这个转换可以通过一个被 BindingConversion注解修饰的静态方法完成:

@BindingConversion
public static ColorDrawable convertColorToDrawable(int color) {
   return new ColorDrawable(color);
}
注意转换只能在setter级别完成,所以下边这种混合类型是不行的:

<View
   android:background="@{isError ? @drawable/error : @color/white}"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

Android Studio对DataBinding的支持

Android Studio对DataBinding代码的编辑特性提供了许多支持。例如下边的几种数据绑定表达式特性:

  • 语法高亮
  • 标明表达式的语法错误
  • XML代码的编译
  • 引入参考,比如引导和快速文档(?)

注意:数组和泛型类型,比如Observable类型,可能会在没有error时仍显示error。

预览窗会显示提供了的绑定表达式的默认值。在下边的例子中引用了布局XML文件中的元素,预览窗在TextView显示了PLACEHOLDER的默认文字。

<TextView android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="@{user.firstName, default=PLACEHOLDER}"/>

如果你需要在你的工程中能在设计时显示默认值,你可以使用tools属性代替默认表达式的值, 参考 Designtime Layout Attributes

Google Data Binding Library的翻译到此结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值