Comment utiliser setMultiChoiceItems () avec une AlertDialog personnalisée qui utilise un arrayadapter d'efficacité?

StackOverflow https://stackoverflow.com/questions/3410810

  •  25-09-2019
  •  | 
  •  

Question

Je suis en train d'écrire un lecteur de musique qui utilise un adaptateur personnalisé extension BaseAdapter (adaptateur d'efficacité) que je veux afficher dans un AlertDialog en utilisant setAdapter() où l'utilisateur peut cliquer sur l'une des chansons pour passer à cette position dans la liste de lecture ou vérifier les chansons à supprimer de la liste de lecture. J'ai essayé d'utiliser un écouteur de clic personnalisé de sorte qu'un utilisateur puisse cliquer juste le temps pour supprimer l'élément de la liste, mais le listview ne fonctionne tout simplement pas juste ... il ôtait les mauvais éléments (ceux à la fin), même si la ArrayList contenait les éléments de liste de lecture correcte ... (quand j'ai enlevé l'élément de la ArrayList, je l'ai passé à l'adaptateur qui a appelé notifyDataSetChanged ... mais que tout n'a pas fonctionné comme je l'ai mentionné. il y a certainement un bug dans le AlertDialog ListView ... parce qu'il n'y a aucune raison pour qu'il ait sauté au large des résultats de la fin plutôt que l'élément correct.

Alors ... la prochaine méthode que je voudrais essayer est d'utiliser la méthode setMultiChoiceItems() du AlertDialog ... mais il semble que cela ne fonctionne pas avec un adaptateur personnalisé ... que de simples tableaux. Est-ce que je dois sous-classe AlertDialog et Override la méthode setMultiChoiceItems() ou est-il une manière que je peux le faire fonctionner avec un ArrayAdapter?

En fait, je ne peux pas comprendre comment même itérer la liste que le AlertDialog crée ou si elle passe même ce point de vue en quelque sorte. De plus, je ne pense pas que je peux même écouter clique sur checkboxes si je les ajouter à la ligne. Toute aide sera grandement appréciée.

EDIT: Poser des questions ici est comme par magie ... Je lui ai répondu à ma propre question ... voilà comment je l'ai fait. J'ajouté un indice pour chaque checkbox qui est la position de l'élément dans le ArrayList. Ensuite, je OnCheckedChangeListener pour capturer les sélections. Lorsque vous définissez une indication, il ajoute du texte à la checkbox ... depuis l'arrière-plan de la AlertDialog est blanc (même pour les articles cliqués?) Je viens de définir la couleur de texte allusion à la transparence.

holder.check.setHintTextColor(Color.TRANSPARENT);
holder.check.setHint(String.valueOf(position));
holder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() {

public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
        int position = Integer.parseInt((String) buttonView.getHint());
        Log.v("onCheckedChanged", "Checked: "+isChecked+" returned: "+position+" which should be "+getItem(position).name);                         
    }

});
Était-ce utile?

La solution

Cette et Cette

puis Passer une référence à byte [] dans setMultiChoiceItems().

final boolean[] booleans = {false, true, false, true, false, false, false};

Ensuite, vérifiez la valeur de l'intérieur booleans setPositiveButton().

Si vous devez passer cette AlertDialog étendre autour, puis AlertDialog et ont créer un booléen de champ tel que décrit dans 1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top