DataBinding (二) 事件处理

2024-02-28 08:08
文章标签 事件处理 databinding

本文主要是介绍DataBinding (二) 事件处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DataBinding 的事件处理有两种方法 
1. 方法引用 
2. Listener 绑定

方法引用
通常会定义一个 Handler 或者 Presenter 类,并定义一个和 Listener 的方法签名一样的方法,然后再 xml 中调用。

public class MyHandlers {public void onClick(View view) { ... }
}
<TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{user.firstName}"android:onClick="@{handlers::onClick}"/>


Listener 绑定
Listener 绑定采用了 Lambda 的形式,和方法引用差不多,但是不管是 Lambda 的参数还是调用方法的参数,都不需要遵循原 Listener 的方法签名。

public class Presenter {public void onClick(Task task){}
}
<TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{user.firstName}"android:onClick="@{() -> presenter.onClick(viewModel)}"/>


由于不受方法签名的限制,以下两种写法也是可以的

android:onClick="@{(view) -> presenter.onClick(viewModel)}"
public class Presenter {public void onClick(View view, Task task){}
}android:onClick="@{(view) -> presenter.onClick(view, viewModel)}"


再来一个 CheckBox 的例子

<CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content"android:onCheckedChanged="@{(cb, isChecked) -> presenter.completeChanged(viewModel, isChecked)}" />


如果用到了三目条件表达式 (?:),但是事件处理只有一个的情况下,另一个事件处理可以用 void 来¥代替

android:onClick="@{(v) -> v.isVisible() ? doSomething() : void}"

 

这篇关于DataBinding (二) 事件处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/754902

相关文章

Android触摸事件处理机制之requestDisallowInterceptTouchEvent

一、触摸事件传递的规则 当手指触摸到屏幕时,系统就会调用相应的View的onTouchEvent,并传入一系列的action。当有多个层级的View时,在父层级允许的情况下,这个action会一直向下传递直到遇到最深层的View。所以touch事件最先调用的是最底层View的onTouchEvent,如果View的onTouchEvent接收到某个touchaction并做了相应处理,最后有两种

java AWT事件处理

事件处理的过程中,主要涉及3类对象: Event Source(事件源):事件发生的声所,如按钮,窗口,菜单等组件。 Event(事件):事件封装了GUI组件上发生的特定事情(通常是一次用打操作)。 Event Listener(事件监听器):负责监听事件源所发生的事件,并对各种事件做出响应处理。 实现AWT事件处理机制的步骤如下: 1.实现事件监听器类,该监听器类是一个特殊的java类

Flink进阶-Flink CEP(复杂事件处理)

0. 本文概述简介 FlinkCEP是在Flink之上实现的复杂事件处理(CEP)库。 它允许你在×××的事件流中检测事件模式,让你有机会掌握数据中重要的事项。 本文描述了Flink CEP中可用的API调用。 首先介绍Pattern API,它允许你指定要在流中检测的模式,然后介绍如何检测匹配事件序列并对其进行操作。 然后,我们将介绍CEP库在处理事件时间延迟时所做的假设。 1.入门 首先是要

IOS事件处理编程指南(一)——概要

在IOS设备中,我们能够处理多种事件。IOS将事件分为了如下三种:MultiTouch events,Motion events,和Remote control events。 被UIKit简化的事件处理 不用多说,UIKit框架为我们封装并实现了一些常用事件,同时,我们也可以通过重写touch系列响应函数,或为View添加系统定义好的或我们自定义的Gesture Recongize来处

Scala界面事件处理

示例代码: import scala.swing.SimpleSwingApplicationimport scala.swing.MainFrameimport scala.swing.Buttonimport scala.swing.Labelimport scala.swing.Orientationimport scala.swing.BoxPanelimpo

jQuery 事件处理 on()

说到jQuery的事件处理,不得不提jQuery中一个全能事件方法 $(select).on() 。在给元素添加事件中,貌似它无所不能。用过jQuery的你肯定用过该方法。 一说到事件,经常听人说,事件绑定,事件监听和事件委派。那么这三者的区别是什么呢?事件委派在本文章不做讲述,因为应用场景我还没有遇到过,下面用代码来讲解一下事件绑定和事件监听的区别 <!-- html --><input

dialog中 使用DataBinding数据绑定

kotlin代码实现 class InventoryErrorGoodDialog(context: Context) : BaseDialog(context, R.style.Theme_Dialog_Default) {private var dataBindingView: ViewDataBinding? = nullinit {dataBindingView = DataBindi

Databinding xml例子

https://juejin.im/entry/59104e43128fe1005857ee5f 一篇文章链接 仅仅展示数据绑定成功后xml使用 android:text="@{String.valueOf(index + 1)}"android:visibility="@{age > 13 ? View.GONE : View.VISIBLE}"android:transitionN

Databinding的 xml 数据绑定使用

XML中绑定数据支持的表达式 数学 + - / * %字符串连接 +逻辑 && ||二进制 & | ^一元运算 + - ! ~三元运算 ?:判断是否为空 ??(例:android:text="@{user.name ?? user.defaultName}",相当于android:text="@{user.name !=null ? user.name : user.defaultName}")

DataBinding简介

优点: 省去了findViewById()兼容到Android2.1(API 7)不使用反射,保证了性能支持绝大部分的 Java 写法最大程度减少绑定应用程序逻辑与视图所必需的代码支持双向绑定,即数据改变时可更新视图,反之亦然支持在任意线程更新数据(RecyclerView 和 ListView的数据除外 )避免了因数据导致的空指针,当绑定的数据无效时,视图会显示绑定数据类型的默认值 Andr