Intereting Posts
Как записывать журнал модема в Android Сохранить / Создать MMS в папке «Входящие» Как я должен кодировать, чтобы противостоять «одноразовому пиратству»? Позвоните в веб-службу .NET на Android В чем разница в GCC между -std = gnu ++ 0x и -std = c ++ 0x и какой из них следует использовать? Как я могу использовать вывод в logcat после Fatal Signal 11, чтобы выяснить, откуда я получаю сообщение об ошибке в собственном коде Android? Как использовать getString () для статической строки перед onCreate ()? Удаление страницы фрагмента из ViewPager в Android Как проверить, существует ли таблица в базе данных Android SQLite? Заставить полноэкранный режим для повторного просмотра / переименования в резюме? DexIndexOverflowException только при выполнении тестов Ошибка раздувания класса android.support.v4.view.ViewPager Разница между setContentView и LayoutInflater Live Streaming для Android с помощью Phonegap? Facebook Graph API: получение случайных друзей N?

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