如何正确集成Listener Bindings和Lambda表达式

时间:2017-02-20 06:46:00

标签: android android-databinding

我已经开始在android应用程序中处理数据绑定。由于没有适当的材料,所以我无法正确理解监听器绑定和lambda表达式概念。我开始研究android official documentation。在本文档中,我在监听器绑定下找到了以下行,这对我来说并不清楚。

  

侦听器绑定为侦听器参数提供了两种选择:您可以忽略方法的所有参数,也可以命名所有参数。

任何人都可以帮助我理解上面的行以及空的lambda表达式和参数化的lambda表达式吗?例如:

android:onClick="@{(v) -> v.isVisible() ? doSomething() : void}"
android:onClick="@{(theView) -> presenter.onSaveClick(theView, task)}"
android:onCheckedChanged="@{(cb, isChecked) -> presenter.completeChanged(task, isChecked)}" 

提前致谢。

1 个答案:

答案 0 :(得分:1)

抱歉,我的意思是将此作为答案添加,而不是评论。

onCheckedChanged()方法声明如下:

void onCheckedChanged(CompoundButton buttonView, boolean isChecked);

任何lambda表达式都必须包含所有参数或不包含任何参数。例如:

android:onCheckedChanged="@{(cb, isChecked) -> presenter.completeChanged(task, isChecked)}"
android:onCheckedChanged="@{() -> presenter.completeChanged(task)}"

您从lambda调用的方法可以是您喜欢的任何方法,因此您不需要使用任何参数。

您可以使用您希望参数的任何变量名称。如果您只提供了一些参数,那么数据绑定将无法确定您想要的参数以及可能丢失的参数。因此,文档中的全部或全部注释。