Строка ListView не может быть нажата после добавления кнопки в строку

В настоящее время у меня есть строка ListView . Щелчок по любой области в строке приведет к событиям щелчка ListView .

  if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { this.getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); this.getListView().setMultiChoiceModeListener(new ModeCallback()); this.getListView().setOnItemClickListener(new ListViewOnItemClickListener()); } else { // http://stackoverflow.com/questions/9754170/listview-selection-remains-persistent-after-exiting-choice-mode this.getListView().setOnItemLongClickListener(new ListViewOnItemLongClickListener()); this.getListView().setOnItemClickListener(new ListViewOnItemClickListener()); } 

Теперь, для каждой строки, я хотел бы добавить небольшую кнопку. Нажатие на маленькую кнопку даст событие нажатия кнопки, которое отличается от события первоначального клика ListView .

Введите описание изображения здесь

В моем ArrayAdapter я использую

 public View getView(int position, View convertView, ViewGroup parent) { View rowView = convertView; if (rowView == null) { LayoutInflater inflater = activity.getLayoutInflater(); rowView = inflater.inflate(R.layout.watchlist_row_layout, null); ... } Button button = (Button)rowView.findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Utils.showLongToast("BUTTON CLICK"); } }); 

Введите описание изображения здесь

Нажатие на кнопку даст событие нажатия кнопки. Тем не менее, нажатие на область, отличную от кнопки, больше не приведет к событию ClickView.

Могу я узнать, почему это так? Есть ли способ разрешить это?

Solutions Collecting From Web of "Строка ListView не может быть нажата после добавления кнопки в строку"

Если вы хотите, чтобы оба строки и кнопки были кликабельными , установите

 android:focusable="false" 

Для вашей кнопки . То же самое касается ImageButtons, RadioButtons, …

Android был разработан в основном для большого набора методов ввода. Вся система полностью работоспособна без сенсорного экрана. Чтобы перемещаться по пользовательскому интерфейсу, пользователь может использовать направленную панель, которая фокусирует представления «Представления после представлений», если и только если эти представления являются объективными. По умолчанию все элементы управления Android настраиваются. Чтобы исключить возможности управления, недоступные для фокуса, ListView просто предотвратит выбор (и щелчок) элемента itemview. По дизайну ListView блокирует щелчки элемента itemview, содержащего по крайней мере один настраиваемый потомок, но не делает доступным для контента доступным вызовом setItemsCanFocus (true).

Вот полное объяснение: наличие нескольких кликов в ListView

Стоит отметить, что предпочтительный способ (даже в соответствии с ссылкой, представленной в принятом ответе) – установить атрибут android: descendantFocusability для блокировки фокуса с корневого макета, который вы раздуваете внутри адаптера. Могут быть потенциальные ситуации, когда просто установка атрибута focusable на false для отдельного элемента не решит проблему, но атрибут descendantFocusability будет.