Android开发必看:一文教你完全理解DataBinding框架(下

Log.i(“MainViewModel”, “commonLog - onClick: 没有参数,或者有参数也行,但是 xml 中也必须给它传对应的值”)
}

其中双冒号 :: 绑定方法的签名必须和属性要求的对象方法签名一致。这里即 OnClickListener 的 onClick 方法。同样的,如果是 onLongClick 监听,那就要求你的方法有返回 Bool 值了。

第三种是表达式的写法,我们下面会说,学过 Java8 的都知道箭头 -> 和双冒号 :: 是 Lambda 表达式。

8. 支持表达式

DataBinding 支持部分表达式,还支持 Lambda 表达式,如上的点击事件,但是建议不要过于复杂,因为 DataBinding 不支持单元测试的,报错也不是很智能。支持的运算符和关键字如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9SxZNnCg-1651810470642)(https://upload-images.jianshu.io/ 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 upload_images/22796403-559b572d348a195f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

没有 this、super、new 和显式泛型调用。示例如下:

android:text=“@{String.valueOf(index + 1)}”
android:visibility=“@{age > 13 ? View.GONE : View.VISIBLE}”
android:transitionName=‘@{“image_” + id}’
android:transitionName=“@{ image_ + id}”

String 是无需 import 的,因为是 java.lang 包下的,但是 View 就需要了,见上面的导入 import 说明。

如果需要内嵌字符串,那么需要用单引号包裹。或者使用 `` 符号包裹,如上。

(1) 双问号,三元运算符的简化

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

displayName 不为 null,则使用 displayName,否则使用 lastName。

(2) 访问集合、数组等元素

跟访问数组一样,用 [] 括号访问,比如:

android:text=“@{list[index]}”
android:text=“@{map[key]}”

如果是 map 类型的,甚至可以这样:map.key,就跟访问属性一样。而且会自动强转,如果你的 value 不是字符类型的,DataBinding 会强转为符合 text 属性的类型。

(3) 访问资源

比如说 strings,dimens,color 等

android:padding=“@{large? @dimen/largePadding : @dimen/smallPadding}”
android:text=“@{@string/nameFormat(firstName, lastName)}”
android:text=“@{@plurals/banana(bananaCount)}”

如果是自定义的 View,比如有个 set 方法参数要求是 Drawable,而 xml 中无法配置 Drawable 对象,只能是 int 型的资源地址,那么就需要自定义转换器了,转换器下面说。

9. 避免空指针异常

如下绑定:

android:text=“@{String.valueOf(user.age)}”

如果 user 是空的,不会引发空指针异常,DataBinding 会根据变量的类型,自动设置默认值,比如 age 是 int,那么默认值是 0,不仅是字段,方法也一样。

10. 使用其他 View 的值

tv_msg 会自动生成 tvMsg 字段,因此可以直接调用相关方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值