2016-07-27 1 views
4

Этот код прекрасно работает: КодAndroid Data Binding библиотеки лямбда для пользовательских Listener

адаптер:

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

Xml код:

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

Но мне нужно сделать пользовательские слушатель такой:

Adapter Код:

@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); 
} 

В этом случае приложение не компилируется (не большой удивляют :(), является его даже можно использовать лямбда с пользовательским прослушивателем?

+0

Что говорит ошибка компиляции? –

ответ

1

Это нормально с 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> 

Возможно, это была более старая версия библиотеки привязки данных, которая вызывает вашу ошибку.