Retour des valeurs à partir de plusieurs listes sélectionnées

Edit: D'accord, j'ai trouvé une solution. Je ne sais pas si c'est la bonne solution, mais ça marche correctement. Ajouté au code ci-dessous.

J'essaie d'autoriser un utilisateur à sélectionner un certain nombre de répertoires à partir d'une liste de contrôle et de les retourner en cliquant sur le bouton "Soumettre". Voici un extrait de mon code. Il remplit ListView avec tous les répertoires sur / sdcard /, et pour la sélection initiale (si je sélectionne) lorsque je soumets, le journal affiche les bons choix retournés. Cependant, si je décoche un élément, puis cliquez sur "Soumettre", il s'affiche toujours comme si tous étaient sélectionnés. Dois-je écrire un gestionnaire pour décocher un élément? Je pensais que cela a été pris en charge par le choix de sélection de choix? Merci!

  • Comment ajouter un rembourrage pour l'image d'arrière-plan
  • Limiter les emplacements Autocomplé API aux villes de pays spécifique Android
  • Comment réparer "L'appel nécessite l'API niveau 11" avec Android Activity?
  • Erreur dans le projet Android App Engine connecté
  • Android: Robotium vs android test framework
  • Bouton dans ViewPager faites défiler jusqu'à la page spécifique
  • private SparseBooleanArray a; directoryList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, directoryArray)); submitButton = (Button)findViewById(R.id.submit_button); submitButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { a = new SparseBooleanArray(); a.clear(); a = directoryList.getCheckedItemPositions(); for (int i = 0; i < a.size(); i++) { //added if statement to check for true. The SparseBooleanArray //seems to maintain the keys for the checked items, but it sets //the value to false. Adding a boolean check returns the correct result. if(a.valueAt(i) == true) Log.v("Returned ", directoryArray[a.keyAt(i)]); } } }); 

  • Comment analyser une réponse HTTP non standard?
  • Problème multimédia du réseau Android JellyBean
  • Télécharger et télécharger le profil des tarifs dans Android
  • Android OpenCV Drawing Hough Lines
  • Comment utiliser correctement NDK-Build dans Android Studio 2.2 Aperçu 1
  • Eclipse / adb se déconnecte souvent de mon appareil
  • 4 Solutions collect form web for “Retour des valeurs à partir de plusieurs listes sélectionnées”

    Je sais que vous avez trouvé une solution qui fonctionne pour vous, mais la solution la plus propre et la plus simple qui fonctionnera probablement la plupart du temps est celle (je veux persister tous les identifiants des éléments sélectionnés):

    (Dans mon ListActivity):

     SparseBooleanArray selectedPos = getListView() .getCheckedItemPositions(); ListAdapter lAdapter = getListAdapter(); List<Long> ids = new LinkedList<Long>(); for (int i = 0; i < lAdapter.getCount(); i++) { if (selectedPos.get(i)) { ids.add(lAdapter.getItemId(i)); } } 

    J'ai fait un peu plus de débogage et j'ai trouvé une solution qui fonctionnait pour moi. Édité dans le code ci-dessus. Pour une raison quelconque, le SparseBooleanArray ne se vide pas; Il maintient les clés des cases qui ont été vérifiées. Lorsque getCheckedItemPositions () est appelé, cependant, il définit VALUE sur false. La clé est donc toujours dans le tableau renvoyé, mais elle a une valeur fausse. Seules les cases cochées seront marquées d'une valeur vraie.

    Je ne voulais pas faire cela comme une réponse, mais j'ai dû élargir ce que vous avez fait pour faire plusieurs choix. Pourquoi avez-vous fait une variable de terrain pour vos sélections? Je viens de faire un SparseBooleanArray local …

     public class NaughtyAndNice extends ListActivity { TextView selection; String[] items={"lorem","ipsum", "dolor", "sit", "amet", "consectetuer", "adipisc", "jklfe", "morbi", "vel", "ligula", "vitae", "carcu", "aliequet"}; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,items)); selection = (TextView)findViewById(R.id.selection); this.getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); } public void onListItemClick(ListView parent, View view, int position, long id){ SparseBooleanArray choices = parent.getCheckedItemPositions(); StringBuilder choicesString = new StringBuilder(); for (int i = 0; i < choices.size(); i++) { //added if statement to check for true. The SparseBooleanArray //seems to maintain the keys for the checked items, but it sets //the value to false. Adding a boolean check returns the correct result. if(choices.valueAt(i) == true) choicesString.append(items[choices.keyAt(i)]).append(" "); } selection.setText(choicesString); } } 

    Pas besoin d'utiliser SparseBooleanArray choices = parent.getCheckedItemPositions();

    StringBuilder suffit pour cela.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.