2016-07-27 25 views
4

此代碼工作得很好:Android的數據綁定庫拉姆達定製監聽

適配器代碼:

@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與自定義偵聽器?

+0

編譯錯誤說什麼? –

回答

1

它與gradle這個版本2.2.0 OK:

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> 

也許這是數據綁定庫的舊版本,它會導致您的錯誤。