Пользовательский список, нажав с флажками - PullRequest
8 голосов
/ 22 мая 2009

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

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

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

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

Ответы [ 2 ]

14 голосов
/ 28 ноября 2009

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

<CheckBox android:focusable="false" />
4 голосов
/ 22 мая 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:background="@android:drawable/menuitem_background"
...