Подтвердить что ты не робот

ListView и кнопки внутри ListView

Я хочу показать Button внутри ListView. Цель состоит в том, чтобы щелкнуть по строке ListView или на кнопке.

Нажмите на строку, на которой отображается дополнительная информация. Нажмите на кнопку, которая показывает внизу больше кнопок.

То же, что и приложение GMAIL.

Справа установлен флажок и после нажатия на кнопку снизу появляется панель кнопок.

Моя проблема заключается в том, чтобы вставить кнопку в ListView, кнопка не доступна. Если я добавлю к LinearLayout с помощью кнопки llButton.setClickable(), она будет работать. Но только кнопка. Сам ListView больше не реагирует на клики!

Я пробовал этот пример.

Та же проблема, что и выше...

4b9b3361

Ответ 1

Если вы используете пользовательский адаптер, кнопка "Щелчок" внутри ListView не будет работать, поэтому вы должны попробовать использовать следующий код для проверки OnItemClickListener.

listId.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
      // Your code for item clicks
   }
});

Ответ 2

Просто, чтобы сделать это ясно - и никто, кажется, не сказал что-то такое простое - в то время как одному не разрешено работать с фокусируемыми кнопками в сочетании со списком, для этого существует гораздо более простое решение.

Принятый ответ - заданный - вы всегда должны это делать при настройке прослушивателя кликов для элементов списка, так что глупо, что OP этого не знал.

Если вы используете XML-макет в качестве элемента списка, просто установите для кнопки следующий атрибут, и это приведет к тому, что элемент списка будет доступен для клика:

android:focusable="false"

Ответ 3

Добавьте строку ниже в свой XML-элемент списка.

android:descendantFocusability="blocksDescendants"

Затем ваш элемент списка будет выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:descendantFocusability="blocksDescendants"
android:layout_height="wrap_content" >

    // Your layout objects here

</RelativeLayout>

Ответ 4

Чтобы активировать событие, когда нажата кнопка или элемент списка, вы можете сделать следующее:

Вы обрабатываете только onItemClick:

mListView.setOnItemClickListener(new ListView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> a, View v, int i, long l) {
        // handle click here
    }
);

В адаптере вы изменяете кнопку, чтобы ее нельзя было кликать/фокусировать (или делать это в XML файле):

public class MyAdapter extends BaseAdapter {
    ...
    public View getView(int position, View convertView, ViewGroup parent) {
        .....  
        Button btn = view.findViewById(R.id.button);
        btn.setFocusable(false);
        btn.setClickable(false);               
    }
}

Ответ 5

В моем случае мне пришлось добавить этот атрибут в listView:

<ListView
...
android:clickable="true"
...
</ListView>

И в адаптере просто добавьте прослушиватель кликов в виде кнопки.

wrapper.getButtonHi().setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            DebugUtils.logDebug("Clickeado :: "+ mContact.getUserId());
        }
});

Важно установить конечные переменные:

public View getRowView(final int position, View convertView, ViewGroup parent) {
    final BrowseContactItemWrapper wrapper;
    final UserModel mContact = lstContact.get(position);
    .....
}