2016-07-27 7 views
4

Dieser Code funktioniert gut:Android Daten für benutzerdefinierte Listener-Bibliothek Lambda-Bindung

Adapter Code:

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

XML-Code:

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

Aber ich brauche Gewohnheit zu machen Hörer wie folgt:

Adapter Code:

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

XML-Code:

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

Listener Code:

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

In diesem Fall wird die Anwendung nicht kompiliert (nicht große Überraschung :(), ist es sogar möglich, Lambda mit benutzerdefinierten Listener zu verwenden?

+0

Was sagt der Kompilierungsfehler? –

Antwort

1

Es ist OK mit gradle 2.2.0 Version:

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> 

Vielleicht war das eine ältere Version der Datenbindungsbibliothek, die Ihren Fehler verursacht.

Verwandte Themen