绑定适配器¶
更新日期 2020-4-20
- 2020-4-20 创建文档
绑定适配器负责发出相应的框架调用来设置值。例如,设置属性值就像调用 setText() 方法一样。再比如,设置事件监听器就像调用 setOnClickListener() 方法。
对象转换¶
自动对象转换¶
当绑定表达式返回 Object 时,库会选择用于设置属性值的方法。 Object 会转换为所选方法的参数类型。对于使用 ObservableMap 类存储数据的应用,这种行为非常便捷,如以下示例所示:
<TextView
android:text='@{userMap["lastName"]}'
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
还可以使用 object.key
表示法引用映射中的值。例如,以上示例中的 @{userMap["lastName"]}
可替换为 @{userMap.lastName}
。
表达式中的 userMap 对象会返回一个值,该值会自动转换为用于设置 android:text
特性值的 setText(CharSequence)
方法中的参数类型。
如果参数类型不明确,则必须在表达式中强制转换返回类型。
自定义转换¶
在某些情况下,需要在特定类型之间进行自定义转换。例如,视图的 android:background 特性需要 Drawable,但指定的 color 值是整数。以下示例展示了某个特性需要 Drawable,但结果提供了一个整数:
<View
android:background="@{isError ? @color/red : @color/white}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
每当需要 Drawable 且返回整数时,int 都应转换为 ColorDrawable。您可以使用带有 BindingConversion 注释的静态方法完成这个转换,如下所示:
@BindingConversion
public static ColorDrawable convertColorToDrawable(int color) {
return new ColorDrawable(color);
}
但是,绑定表达式中提供的值类型必须保持一致。您不能在同一个表达式中使用不同的类型,如以下示例所示:
<!-- 不能这么做 -->
<View
android:background="@{isError ? @drawable/error : @color/white}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
本站说明
一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~