2016-06-15 13 views
3

私はAndroid Developers Binding Eventsの例を踏襲し、ステップバイステップを実装しました。それはうまく動作します。しかし、アダプタからハンドラにパラメータを送信したいのですが、どのようにデータバインディングハンドラを使ってこれを実現できますか?androidデータバインディングライブラリを使用してバインディングイベントにパラメータを渡す方法

+1

これまでに何を試しましたか?あなたのコードを投稿してください。どんな種類のパラメータを渡そうとしていますか? –

答えて

5

私は答えを得ました。

layout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

<data> 

    <variable 
     name="movie" 
     type="embitel.com.databindingexample.helper.Movie" /> 

    <variable 
     name="handler" 
     type="embitel.com.databindingexample.helper.MyHandlers" /> 

</data> 

<android.support.v7.widget.CardView 
    android:id="@+id/cardview" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:layout_marginTop="4dp" 
android:onClick="@{(view)->handler.onItemClicked(view,movie)}" 
app:cardBackgroundColor="@android:color/white" 
    app:cardCornerRadius="4dp"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="8dp"> 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="128dp" 
      android:scaleType="centerCrop" 
      app:error="@{@drawable/ic_launcher}" 
      app:imageUrl="@{movie.imageUrl}" /> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@{movie.title}" /> 

    </LinearLayout> 

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

次いでとしてハンドラクラスを作成onclickの使用ラムダ式のXMLで 、

public class MyHandlers { 

public void onItemClicked(View v, Movie movie) { 
    Context context = v.getContext(); 
    context.startActivity(DetailActivity.buildIntent(context, movie)); 
} 

}

そして、あなたはまた、任意のクラスのハンドラメソッドを置くことができます

binding.setHandler(new MyHandlers()); 

、そのXMLは次のようにiflatedされるハンドラを設定する必要があります。その場合、そのクラス名をハンドラとして設定する必要があります。

+0

ラムダを使わずにどうすればいいですか? –

関連する問題