Как инициализировать прослушиватель кликов на адаптере представления Recycler с помощью привязки данных?

Я собираюсь сделать универсальный адаптер для всех динамических макетов, обычно я справлялся со всеми этими вещами, но я застрял на том, как инициализировать прослушиватель кликов с помощью интерфейса, чтобы я определял в любом xml и получал событие в своем классе.

я перехожу по этой ссылке: 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>

Пожалуйста, дайте мне ссылку и решение, я буду благодарен вам.


person chari sharma    schedule 10.11.2017    source источник
comment
Это укажет вам правильное направление: stackoverflow.com/a/42795719/436417   -  person Uli    schedule 10.11.2017
comment
я не могу получить: binding.setViewModel(new ViewModel()); я также упоминаю модель представления в xml, но я получаю только binding.setVariable . вот мой xml: ‹data› ‹имя переменной=тип пользователя=com.learn2crack.databinding.User/› ‹имя переменной=viewHolder type=com.learn2crack.databinding.BooksRecyclerAdapter.BindingHolder/› ‹/data›   -  person chari sharma    schedule 15.11.2017
comment
наконец, я решаю это, используя этот держатель.getBinding().setVariable(com.package.BR.viewHolder, держатель);   -  person chari sharma    schedule 15.11.2017
comment
Возможно, вы используете неправильный класс ViewBinding в ViewHolder. Используйте класс привязки, созданный из файла xml, который вы только что процитировали.   -  person Uli    schedule 15.11.2017


Ответы (1)


Вы можете передать любого пользователя/позицию. Если вы хотите передать позицию внутри clickListener, вы должны передать ее как переменную в xml так же, как пользователь, а затем

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

Или

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

а потом

android:onClick="@{() -> handlers.onClickFriend(position)}
person Ravi    schedule 10.11.2017