Настраиваемый список, щелчок с флажками

Я заполнил ListActivity из Cursor, используя SimpleCursorAdapter, который запускает другое действие при нажатии на один из элементов списка. Я также использую ViewBinder для пользовательского преобразования данных.

Я хочу добавить CheckBox в каждую строку в списке, поэтому я изменил представление и добавил CheckBox с правом гравитации.

Добавление CheckBox удалило возможность щелкать по элементам. Метод onListItemClick, который я переопределил в ListActivity, больше не вызывается, когда вы нажимаете на элемент списка. Удаление CheckBox исправляет это. Почему это?

Кроме того, как я могу настроить список так, чтобы он продолжал выполнять мои требуемые функции, если щелкнули основную часть элемента списка, но имел дополнительные функции, когда отмечен CheckBox в элементе? Будет ли работать установка onCheckedChangedListener или один и тот же экземпляр представления будет повторно использоваться для каждого элемента в списке?


person Tom Martin    schedule 21.05.2009    source источник


Ответы (2)


Как объяснено здесь, прослушиватель кликов работает, только если нет других вид focusable. Установка CheckBox на focusable="false" должна помочь:

<CheckBox android:focusable="false" />
person Josef Pfleger    schedule 28.11.2009

Похоже, SimpleCursorAdapter слишком примитивен для того, чего я хотел достичь. Я переключился на реализацию CursorAdapter и возврат нового представления с помощью LayoutInflater в моей реализации метода newView.

  public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return LayoutInflater.from(context).inflate(R.layout.alarm_row, parent, false);
  }

Затем в bindView я установил пользовательский OnClickListener для основного LinearLayout, а затем еще OnCheckedChangeListener для CheckBox.

Чтобы все это выглядело правильно, мне пришлось установить фон LinearLayout в меню android для рисования:

android:background="@android:drawable/menuitem_background"
person Tom Martin    schedule 21.05.2009