2

모든 동적 레이아웃에 대해 범용 어댑터를 만들려고합니다. 일반적으로이 모든 것을 처리했지만 인터페이스를 사용하여 클릭 수신기를 초기화하는 방법을 고수했습니다. 따라서 xml을 정의하고 클래스에서 이벤트를 가져옵니다. https://developer.android.com/topic/libraries/data-binding/index.html데이터 바인딩을 사용하여 Recycler 뷰 어댑터에서 클릭 리스너를 초기화하는 방법은 무엇입니까?

이는 재활용보기 내 루트 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)} 
관련 문제