事件绑定语法

方法引用
方法参数和返回值必须和监听器方法一致。
例如 事件
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部分

  
  

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}" 错误

你可能感兴趣的:(事件绑定语法)