Intereting Posts
Свойства Android, которые можно анимировать с помощью ObjectAnimator Вложенные фрагменты – IllegalStateException "Не удается выполнить это действие после onSaveInstanceState" Как получить номер телефона устройства программно Центрировать две кнопки по горизонтали Ошибка кодера на графическом процессоре Adreno при кодировании с поверхности Android Studio – Неоднозначный вызов метода getClass () Java.lang.NoClassDefFoundError: тесты android и junit Отсутствует сервис типа Factory, доступный в ProjectScopeServices Выпуск подписи Android Release Build «Не удалось прочитать ключ из хранилища ключей» Тестирование ViewPager (и CursorLoader) с помощью Robolectric Как создать действительно маленькие кнопки в android из кода? Android – Меню переполнения и кнопка «Назад» не отображаются на панели инструментов Collapsing Использование значения audioSessionId для создания класса AudioFx? Ошибка индекса Android за пределами границ без кода приложения в трассировке стека Действия в onActivityResult и "Ошибка Не удается выполнить это действие после onSaveInstanceState"

OnItemClickListener не работает с элементом ListView, содержащим кнопку

У меня есть ListView с пользовательским Adapter который поставляет View в ListView таким образом:

  public View getView(int position, View convertView, ViewGroup parent) { RelativeLayout.LayoutParams lineParams; RelativeLayout line=new RelativeLayout(context); TextView tv=new TextView(context); tv.setText("Text in postion="+i); lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lineParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); line.addView(tv, lineParams); lineParams.addRule(RelativeLayout.CENTER_IN_PARENT); //checkbox CheckBox checkBox=new CheckBox(context); lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lineParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); lineParams.addRule(RelativeLayout.CENTER_IN_PARENT); line.addView(checkBox, lineParams); return line; } 

И где-то внутри ListView есть setOnItemClickListener() , который должен перехватывать события щелчка элемента. Моя проблема в том, что всякий раз, когда я пытаюсь добавить флажок к элементу, я не получаю никаких комментариев от своего ListView . Если я пропущу CheckBox или любую другую Button она будет работать.

Я действительно застрял в этой проблеме, я пробовал все виды макетов, выравнивания, обертывания и т. Д. – бесполезно. Похоже, CheckBox мешает событиям щелчка элемента CheckBox ListView .

Любые идеи, как преодолеть?

Solutions Collecting From Web of "OnItemClickListener не работает с элементом ListView, содержащим кнопку"

Просто добавьте эту строку в представления элементов вместо самого списка

 android:focusable="false" 

Просмотрите более подробную информацию об этом из пользовательского ListView, неспособного щелкнуть по элементам

Я также столкнулся с той же проблемой, с которой я пытался установить android:focusable="false" в listview, но это не работает, тогда я добавляю это в элемент listview. Например, в моем элементе listview у меня есть кнопка Toggle, которая создает проблему , Я добавляю android:focusable="false" для кнопки Toggle и listview на новой функции запуска прослушивания элемента

Если у вас есть элементы ImageButtons внутри элемента списка, вам нужно добавить:

 android:descendantFocusability="blocksDescendants" 

К элементу элемента корневого списка [например, корневой макет].

Затем в каждом элементе ImageButton в элементе списка вам нужно добавить:

 android:focusableInTouchMode="true" 

Это сработало для меня, но я использовал ImageButtons, а не стандартную кнопку.

У меня также была проблема с Button в моем ListView. К сожалению, просто установка фокуса на false для всех объектов моего адаптера не сработала для меня.

Теперь у меня есть обходное решение.

В своем адаптере создайте OnClickListener для кнопки (или другого объекта, который можно щелкнуть), если вы еще этого не сделали. В этом OnClickListener вы вызываете OnItemClickListener самостоятельно.

 public void onClick(View v) { mOnItemClickListener.setOnItemClick(mListView, v, vPos, vId); } 

Это означает, что вам нужно будет предоставить доступ вашему адаптеру как к родительскому ListView, так и к OnItemClickListener.

Добавьте следующую строку в список listView

 android:choiceMode="singleChoice" 

Или не забудьте установить следующие строки в текстовые поля макета

 android:focusable="false" android:focusableInTouchMode="false" android:clickable="false" 

Вы можете подумать о том, чтобы написать свой OnTouchEvent в своем элементе listview и отправить правильное касание к вашему дочернему виду, кнопку.

Если вы используете ListView в Activity , убедитесь, что у вас установлена setOnItemClickListener()

 myListView.setOnItemClickListener(this); // if your activity implement OnItemClickListener