databinding 事件监听
2019-08-12 本文已影响0人
忧郁的老王
databinding 有几种事件监听方式,添加方法监听和lambda 方法调用
lambda 方法调用
<data>
<variable
name="viewModel"
type="com.tcsc.app.operationalplatform.view.activity.wallet.cashapply.BankCardViewModel" />
<variable
name="handlers"
type="com.tcsc.app.operationalplatform.view.activity.wallet.cashapply.ApplyCashActivity.CardListener" />
</data>
在xml 中引入一个外部定义的监听器,监听器可以来自任何地方例如以上代码中 handlers 就是我们引入的一个监听器。
监听器的调用:
<android.support.constraint.ConstraintLayout
android:onClick="@{( )->handlers.onChoiceCard(viewModel.number,viewModel.name,viewModel.bankLogo)}"
android:id="@+id/constraintLayout2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="15dp"
android:layout_marginEnd="15dp"
android:layout_marginRight="15dp"
android:background="@drawable/shape_corners_5_white">
直接调用方法
<EditText
android:afterTextChanged="@{callbacks::nameChanged}" .../>
public class Callbacks {
public void nameChanged(Editable editable) {
//...
}
}
直接调用监听器
定义个一个外部监听器,然后直接引用他,但是这种监听器引用的方式只适用于可以调用set方式添加的监听器
<View android:onClick="@{listeners.clickListener}" .../>
三种方式的区别
引用方式 | 是否需要签名保持一致 | 是否需要需要参数字段一致 | 返回值处理 |
---|---|---|---|
监听器引用 | 是,只能使用可以set的监听器 | 是,只能使用可以set的监听器 | 按原监听器处理 |
方法调用 | 否 | 是 | 按原监听器处理,如果返回值不匹配将不被调用 |
lamda方法调用 | 否 | 否 | 可以不用返回值将自动填入默认返回值 |