Pourquoi est-ListView.getCheckedItemPositions() ne retourne pas de valeurs correctes?

L'application dispose d'un ListView avec sélection multiple est activé, dans l'INTERFACE utilisateur qu'il fonctionne comme prévu. Mais quand je lis les valeurs à l'aide de ce code:

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));
  }
}

- Je obtenir cette sortie, quel que soit son état de chaque case est en:

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

La SparseBooleanArray semble renvoyer false pour tout inexistante, de sorte que la source des problèmes semble être que getCheckedItemPositions() retourne un tableau vide. La méthode est de se comporter comme si il n'y a pas d'éléments dans la liste, mais il y a des.

Je peux le voir dans les docs qu'aucune valeur n'est renvoyée lorsque la liste n'est pas défini comme la multi-sélection, mais il est, à l'aide de cette instruction:

categorySelector.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

Dans mon scénario, la carte que j'utilise est une sous-classe de ArrayAdapter, et (sans preuves solides) je soupçonne que cela pourrait être la cause, mais je ne vois pas pourquoi cela ne fonctionnerait pas.

  • Dommage que je n'ai pas vu cette question (ans) plus tôt, mais comment avez-vous vérifier les éléments de la liste? Il n'est ni une erreur évidente dans le code ci-dessus, ni dans le résultat. Cela devrait fonctionner si vous définissez l'état activé avec categorySelector.setItemChecked(int position, une valeur booléenne).
InformationsquelleAutor Ollie C | 2010-10-22