用于自定义监听器的 Android 数据绑定(bind)库 lambda

标签 android lambda binding listener

这段代码工作得很好:

适配器代码:

@BindingAdapter({"app:onClick"})
public static void setOnClick(My view, View.OnClickListener onClickListener)
{
   view.addOnClickListener(onClickListener);
}

XML代码:

app:onClick="@{ (v) -> view.onClick(v) }"

但我需要像这样制作自定义监听器:

适配器代码:

@BindingAdapter({"app:onClose"})
public static void setOnClose(My view, My.OnCloseListener onCloseListener)
{
   view.addOnCloseListener(onCloseListener);
}

XML代码:

app:onClose="@{ (x, y) -> view.onClose(x, y) }"

监听器代码:

public interface OnCloseListener
{
    void onClose(My x, int y);
}

在这种情况下,应用程序无法编译(不足为奇 :( ),甚至可以将 lambda 与自定义监听器一起使用吗?

最佳答案

用gradle 2.2.0版本就可以了:

public interface ITest {
    void apply(String apply);
}

@BindingAdapter({"test"})
public static void testAdapter(View view, ITest test){
}

public interface IViewModel extends Observable {
    void accept(String string);
}
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
        <variable
            name="vm"
            type="com.example.mvvm.IViewModel"
            />
    </data>

    <View
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:test="@{vm::accept}"
        />

</layout>

可能是旧版本的数据绑定(bind)库导致了你的错误。

关于用于自定义监听器的 Android 数据绑定(bind)库 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38624735/

相关文章:

java - Android Facebook 分享问题?

android - 以编程方式启用 android 设备管理

java - 尝试理解 Java 8 中的 lambda 和流

.net - WPF:直接绑定(bind)到控件

extjs - Ext JS 5 数据绑定(bind)组合框

android - 具有 HDPI/MDPI 分辨率的小屏幕时,字体大小会过大

java - 使用 Jackson 将 JSON 解析为对象

c# - 在 C# 中的运行时检查 lambda 表达式

c# - lambda 字符串按日期和数字排序

c# - 如何在 WPF 中设置 DataGrid 的 DataSource?