事件绑定语法

方法引用
方法参数和返回值必须和监听器方法一致。
例如 事件
void View.OnClickListener.onClick(View v)
对应
void methodReferences(View v) 正确
boolean methodReferences(View v) 错误
void methodReferences() 错误

事件
boolean View.OnLongClickListener.onLongClick(View v)
对应
boolean methodReferences(View v) 正确
void methodReferences(View v) 错误
boolean methodReferences() 错误

布局文件绑定语法
android:onClick="@{handler.methodReferences}" 正确
android:onClick="@{handler::methodReferences}" 正确
android:onLongClick="@{handler::longClick}" 正确
android:onCheckedChanged="@{handler::checkedChanged}" 正确

监听器绑定
使用lambda表达式定义,只需要返回值和监听器方法一致,参数可任意。
*** 解析表达式时候有一个特别的变量名context,取自root view 的getContext()**

data部分
<data>
  <variable name="user" type="net.dou7.learndatabinding.models.User" />
  <variable name="handler" type="net.dou7.learndatabinding.EventHandler" />
</data>

android:onClick="@{() -> handler.click(user)}" 正确
android:onClick="@{(v) -> handler.click(v, user)}" 正确
android:onClick="@{() -> handler.click(context, user)}" 正确

()中的参数要么不定义,要么全部定义
比如RadioGrouponCheckedChanged(Group group, int checkedId)有2个参数
android:onCheckedChanged="@{() -> handler.changed(context)}" 正确
android:onCheckedChanged="@{(group, checkedId) -> handler.changed(context, group)}" 正确
android:onCheckedChanged="@{(group) -> handler.changed(context, group)}" 错误

表达式使用三元运算符的时候,可以使用void
android:onClick="@{(v) -> v.isVisible() ? doSomething() : void}"
仅当事件方法无返回值的时候可以,如下是错误的
android:onLongClick="@{(v) -> v.isVisible() ? doSomething() : false}" 错误

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容