Приложение имеет ListView с включенным множественным выбором, в пользовательском интерфейсе оно работает как положено.Но когда я считываю значения с помощью этого кода:
Log.i(TAG,"Entered SearchActivity.saveCategoryChoice()");
SparseBooleanArray checkedPositions = categorySelector.getCheckedItemPositions();
Log.i(TAG,"checkedPositions: " + checkedPositions.size());
if (checkedPositions != null) {
int count = categoriesAdapter.getCount();
for ( int i=0;i<count;i++) {
Log.i(TAG,"Selected items: " + checkedPositions.get(i));
}
}
я получаю этот вывод, независимо от того, в каком состоянии находится каждый флажок:
Entered SearchActivity.saveCategoryChoice()
checkedPositions: 0
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
SparseBooleanArray кажется, возвращает false для любого несуществующего элемента, поэтому источником проблем, как представляется, является то, что getCheckedItemPositions () возвращает пустой массив.Метод ведет себя так, как будто в ListView нет элементов, но они есть.
Я могу видеть из документов, что никакие значения не возвращаются, когда ListView не настроен как множественный выбор, но это, используя это утверждение:
categorySelector.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
В моем сценарии адаптер, который я использую, является подклассом ArrayAdapter, и (без каких-либо веских доказательств) я подозреваю, что это может быть причиной, хотя я не могупонять, почему это не должно работать.