2016-05-08 22 views
20

Możliwe jest przekazywanie niestandardowych argumentów do metody onClick przy użyciu biblioteki powiązań danych? Mam plik xml układ, gdzie trzeba użyć onClickListener:Android Data Binding przekazuje argumenty do metody onClick

<?xml version="1.0" encoding="utf-8"?> 
<layout ...> 

    <data> 
     <variable 
      name="viewModel" 
      type="com.productivity.tiktak.ui.tracker.viewModel.CategoryViewModel"/> 
     <variable 
      name="callback" 
      type="com.productivity.tiktak.ui.tracker.TrackerAdapter"/> 
    </data> 

    <android.support.v7.widget.CardView 
     android:onClick="@{callback.onCategoryClick(viewModel)}" 
     ... 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <!-- ... Some stuff --> 

    </android.support.v7.widget.CardView> 
</layout> 

i I a mam kliknij kod obsługi tutaj:

public void onCategoryClick(View view, CategoryViewModel categoryViewModel) 
{ 
    //handler code... 
} 

Czy to możliwe, aby przejść mojego obiektu CategoryViewModel z xml do klikania treser?

Odpowiedz

41

Można używać wyrażeń lambda.

android:onClick="@{() -> callback.onCategoryClick(viewModel)}" 

Jeśli potrzebujesz pogląd, że można przekazać także z:

android:onClick="@{(v) -> callback.onCategoryClick(v, viewModel)}" 
+0

działać dobrze, dzięki! – kolodach

+0

Świetne, dzięki !! – Luten

+0

jest inny sposób, aby to zrobić, ponieważ lambda się nie kompiluje? – JPM