Я новичок в разработке для Android и работаю над приложением для планшета под управлением Android 3.1. Основное действие разделено на более функциональные части и одна из них показывает список некоторых элементов, долгий щелчок по элементу должен открывать контекстное меню. У меня проблема, потому что я не могу заставить его работать.
Основное действие расширяет MapActivity, поскольку оно также содержит карту... ListView использует SimpleCursorAdapter.
Представление списка регистрируется для контекстного меню в методе onCreate основного действия:
alarmList = (ListView) findViewById (R.id.alarmList);
registerForContextMenu(alarmList);
И основное действие переопределяет методы onCreateContextMenu, а также методы onContextItemSelected, но они никогда не вызываются при щелчке элемента.
Мне было интересно, что при использовании ArrayAdapter и простого строкового отображения элемента контекстное меню списка работает хорошо, и список обеспечивает хороший выбор элементов при нажатии (с хорошим эффектом затухания) . Но когда я меняю адаптер на SimpleCursorAdapter, представление списка вообще не реагирует на нажатие. Чтобы «симулировать» клики, я добавил атрибут clickable в ListView:
<ListView android:id="@+id/alarmList" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true"/>
И один элемент списка отформатирован с использованием собственного макета, который начинается так: [alarm_list_item.xml:]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearLayout" android:layout_width="match_parent" android:background="@color/alarm_list_bg"
android:clickable="true" android:baselineAligned="true" android:layout_height="wrap_content" android:minHeight="65dp">
...
[alarm_list_bg:]
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_pressed="false" android:drawable="@color/black_12"/>
<item android:state_pressed="true" android:drawable="@color/grey_12" />
<item android:state_selected="true" android:state_pressed="false" android:drawable="@color/blue_12" />
</selector>
Я пытался зарегистрировать несколько прослушивателей непосредственно в экземпляре ListView (OnItemLongClickListener, OnCreateContextMenuListener, OnItemClickListener), но ни один из них называется.
Не могли бы вы подумать, что может быть не так?
С уважением Мирец
SimpleCursorAdapter
: github.com/commonsguy/cw-android/tree/master/Database/Constants - person CommonsWare   schedule 10.10.2011CHOICE_MODE_MULTIPLE
ListView
: github.com/commonsguy/cw-advandroid/tree/master/Honeycomb/ Обратите внимание, что здесь также показано использование режима действия для Honeycomb, поэтому этот пример, возможно, несколько сложнее, чем то, что вам нужно. - person CommonsWare   schedule 11.10.2011