Android Jetpack 架构浅析( 六 )

注意:
1、在表达式中,您可以引用符合监听器方法签名的方法 。
2、当表达式求值结果为方法引用时,数据绑定会将方法引用和所有者对象封装到监听器中,并在目标视图上设置该监听器 。
3、如果表达式的求值结果为 null,则数据绑定不会创建监听器,而是设置 null 监听器 。
4、表达式中的方法签名必须与监听器对象中的方法签名完全一致 。
监听器绑定:
android:onClick="@{() -> presenter.onSaveClick(task)}"
绑定表达式可将视图的点击事件绑定打给Presenter 类的 onSaveClick(Task task) 方法,如下所示:
public class Presenter {public void onSaveClick(Task task){}}<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variable name="task" type="com.android.example.Task" /><variable name="presenter" type="com.android.example.Presenter" /></data><LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"><Button android:layout_width="wrap_content" android:layout_height="wrap_content"android:onClick="@{() -> presenter.onSaveClick(task)}" /></LinearLayout></layout>
以上,我们尚未定义传递给 onClick(View) 的 view 参数 。
监听器绑定提供两个监听器参数选项:您可以忽略方法的所有参数,也可以命名所有参数 。
如果您想命名参数,则可以在表达式中使用这些参数 。
例如,上面的表达式可以写成如下形式:
android:onClick="@{(view) -> presenter.onSaveClick(task)}"
或者,如果您想在表达式中使用参数,则采用如下形式:
public class Presenter {public void onSaveClick(View view, Task task){}}android:onClick="@{(theView) -> presenter.onSaveClick(theView, task)}"
监听长按事件,表达式应返回一个布尔值 。
public class Presenter {public boolean onLongClick(View view, Task task) { }}android:onLongClick="@{(theView) -> presenter.onLongClick(theView, task)}"
注意:
1、监听器绑定这些是在事件发生时进行求值的 lambda 表达式 。
2、数据绑定始终会创建一个要在视图上设置的监听器 。
3、事件被分派后,监听器会对 lambda 表达式进行求值 。

Android Jetpack 架构浅析

文章插图
 
后台私信回复 1024 免费领取 SpringCloud、SpringBoot,微信小程序、Java面试、数据结构、算法等全套视频资料 。




推荐阅读