Comment utiliser setMultiChoiceItems () avec une AlertDialog personnalisée qui utilise un arrayadapter d'efficacité?
-
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);
}
});
La solution
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.