Странное поведение выбора ListView на Android - PullRequest
3 голосов
/ 20 февраля 2009

Получил активность, которая распространяется ListActivity. Список поддерживается собственным адаптером, расширяющим BaseAdapter.

getListView().setFocusable(true);
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

Я делаю простую (getSelectedItemPosition() == ListView.INVALID_POSITION) проверку onPrepareOptionsMenu(), чтобы отключить элементы, для которых требуется выбрать элемент.

Теперь, что я делаю после запуска действия (действие происходит под эмулятором, вер.1.1) как это выглядит:

  1. Хит меню - пункты меню отключены - ОК
  2. Выберите пункт с помощью колесика мыши и нажмите меню - элементы будут включены -Хорошо
  3. Нажмите в любом месте за пределами списка, повторите 2). Предметы не получают включен - WTF?
  4. Начните с нуля, выберите предмет, попав в Del и двигая мышь. результат такой же, как и для 3.

Почему эти (3, 4) вещи продолжают происходить со мной? :) ТИА.

1 Ответ

4 голосов
/ 20 февраля 2009

Опора на selectedItemPosition на ListView может быть опасным подходом. По моему опыту, если список теряет фокус (нажав что-то еще), selectedItemPosition устанавливается на INVALID_POSITION.

В основном, если у вашего предмета нет оранжевого «подсвеченного» вида, рассчитывайте, что selectedItemPosition равно нулю.

В качестве альтернативы вы можете запомнить выбранный элемент, переопределив методы onItemClick и onItemSelection и сохранив индекс выбранного элемента, а затем используйте его для управления доступностью вашего пункта меню.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...