В приложении есть 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 не настроен как multi-select, но он использует это утверждение:
categorySelector.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
В моем сценарии адаптер, который я использую, является подклассом ArrayAdapter, и (без каких-либо убедительных доказательств) я подозреваю, что это может быть причиной, хотя я не понимаю, почему это не должно работать.