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方法调用 可以不用返回值将自动填入默认返回值
上一篇下一篇

猜你喜欢

热点阅读