Вызов прослушивателя в ViewHolder только иногда отвечает

У меня есть следующий код. Ниже вы можете увидеть мой зритель, адаптер и мой xml. Проблема, с которой я сталкиваюсь, заключается в том, что клик иногда не выполняется. Только тогда, когда я также устанавливаю клики-клики в моем наблюдателе в текстовом виде и изображении, чем он работает. Предположительно, щелчок получает съеденный textview и viewview. Любой может понять, почему это происходит.

class GeneralListItemViewHolder(val view: View) : RecyclerView.ViewHolder(view) { var item: GeneralItemViewModel? = null init { view.setOnClickListener { item?.method?.invoke() } } fun bind(item: GeneralItemViewModel) { this.item = item //Do some nice UI things } } 

Мой xml выглядит так:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/ListItem"> <ImageView android:id="@+id/general_list_item_icon" style="@style/ListItem.Icon" android:layout_alignParentStart="true" android:layout_centerVertical="true" /> <TextView android:id="@+id/general_list_item_title" style="@style/ListItem.Labels.Title" android:layout_centerVertical="true" android:layout_marginStart="@dimen/margin" android:layout_toEndOf="@id/general_list_item_icon" /> 

Кроме того, мой код адаптера содержит следующее:

 class GeneralItemAdapter(val items: List<GeneralItemViewModel>) : RecyclerView.Adapter<GeneralListItemViewHolder>() { override fun onBindViewHolder(holder: GeneralListItemViewHolder, position: Int) { return holder.bind(getItem(position)) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GeneralListItemViewHolder { val view = parent.inflate(R.layout.general_list_item, false) return GeneralListItemViewHolder(view) } override fun getItemCount(): Int { return items.size } private fun getItem(position: Int): GeneralItemViewModel { return items[position] } } 

Вы должны установить ClickListener в методе bind.

На самом деле проблема связана с использованием синтетического расширения котлина на представлении. Если вы используете их в представлении переменной вместо itemView, тогда щелчок будет съеден текстовым видом.

 fun bind(item: AboutGeneralItemViewModel) { this.item = item itemView.general_list_item_title.text = item.value itemView.setOnClickListener { item?.method?.invoke() } } 
Intereting Posts
Почему я не могу ссылаться на вложенный объект из val или typealias, ссылающихся на объект? Можем ли мы использовать общие методы infix в Котлин? Как включить обработчик, обработанный обработчиком аннотации, для проверки класса пути в Java / Kotlin Почему Guice не находит привязку List <Interface>? Правильный способ использования reified generic в Котлине Не могли бы вы объяснить этот фрагмент кода с точки зрения кода C #? Kotlin: одно свойство с несколькими сеттерами разных типов База данных Firebase всегда отключена, когда протестирована на физическом устройстве Android Kotlin список vs массива При развертывании плагинов intellij копируются только зависимости. Mockito ArgumentCaptor для функции Kotlin Почему я не могу поставить {анонимного класса на новую линию в Котлин? Как получить данные из базы данных Firebase и сохранить их в ListArray <Class>? – Котлин Асинхронный вызов для каждого элемента внутри коллекции Gradle не находит мои тесты с Kotlin и JUnit 5