2

私はすべての動的レイアウトのためのユニバーサルアダプタを作るつもりですが、通常はこれをすべて処理しましたが、インターフェイスを使用してクリックリスナを初期化して、何でもxmlで定義し、クラスでイベントを取得する方法を固執しました。私は、このリンクをたどっていますデータバインディングを使用してRecyclerビューアダプタでクリックリスナーを初期化する方法はありますか?

https://developer.android.com/topic/libraries/data-binding/index.html

が、これはリサイクルビューの私のルートXMLであると仮定します

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android"> 
<data> 
<variable name="handlers" type="com.example.MyHandlers"/> 
<variable name="user" type="com.example.User"/> 
</data> 

<LinearLayout 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="@{user.firstName}" 
android:onClick="@{handlers::onClickFriend}" 
//>>> i want to initialise interface for position/view instead of @{handlers::onClickFriend}. 
    /> 
</LinearLayout> 
</layout> 

私にリンクして解決策を教えてください、私はあなたに感謝するでしょう。

+0

この必要がありますhttps://stackoverflow.com/a/42795719/436417 – Uli

+0

私は取得できません:binding.setViewModel(new ViewModel());私もXMLでビューモデルを言及しますが、私はただbinding.setVariableを取得しています。ここに私のXMLです: <変数名= "ユーザー" タイプ= "com.learn2crack.databinding.User" /> <変数名= "viewHolder" タイプ= "com.learn2crack.databinding.BooksRecyclerAdapter.BindingHolder" />

+0

最後に、このholder.getBinding()を使用して解決します。setVariable(com.package.BR.viewHolder、holder); –

答えて

1

ユーザー/位置のいずれかを渡すことができます。あなたはclickListener内の位置を渡したい場合は、ユーザーと同じXMLでの変数としてそれを渡す必要があり、その後、

android:onClick="@{() -> handlers.onClickFriend(user)} 

それとも

<variable name="position" type="Integer"/> 

、その後

android:onClick="@{() -> handlers.onClickFriend(position)} 
関連する問題