2010-08-05 8 views
7

Je suis en train d'écrire un lecteur de musique qui utilise un adaptateur personnalisé ExtensionAdaptateur de base que je veux afficher dans AlertDialog en utilisant setAdapter() où l'utilisateur peut soit cliquer sur l'une des chansons pour passer à cette position dans la playlist OU vérifier chansons à supprimer de la playlist. J'ai essayé d'utiliser un écouteur de clic personnalisé afin qu'un utilisateur puisse simplement cliquer longtemps pour retirer l'élément de la liste mais le listview ne fonctionne pas correctement ... il supprimait les mauvais éléments (ceux à la fin) même si le ArrayList contenait les éléments de la liste de lecture correcte ... (quand j'ai retiré l'article du ArrayList, je l'ai passé à l'adaptateur qui a appelé notifyDataSetChanged ... mais cela n'a pas fonctionné comme je l'ai mentionné.Il y a certainement un bogue dans le ... parce qu'il n'y a pas de raison pour que cela sorte des résultats de la fin plutôt que du bon articleComment utiliser setMultiChoiceItems() avec un AlertDialog personnalisé qui utilise un arrayadapter d'efficacité?

Alors ... la méthode suivante 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é ... seulement des tableaux simples. Je dois sous-classe AlertDialog et Override la méthode setMultiChoiceItems() ou est-il un moyen que je peux le faire fonctionner avec un ArrayAdapter?

Fondamentalement, je ne peux pas comprendre comment même itérer la liste que le AlertDialog crée ou s'il passe même cette vue en quelque sorte. En outre, je ne pense pas que je peux même écouter des clics sur checkboxes si je les ajoute à la ligne. Toute aide est la bienvenue. EDIT: Poser des questions ici est comme par magie ... J'ai répondu à ma propre question ... c'est comme ça que je l'ai fait. J'ai ajouté un indice à chaque checkbox qui est la position de l'article dans le ArrayList. Ensuite, j'ai utilisé OnCheckedChangeListener pour capturer les sélections. Lorsque vous définissez un indice, il ajoute du texte au checkbox ... puisque l'arrière-plan du AlertDialog est blanc (même pour les éléments cliqués?) Je viens de définir la couleur du texte de l'indice à transparent.

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

}); 
+0

Vous avez répondu à votre question par vous-même. Essayez de copier/coller le texte et utilisez le mécanisme de réponse correctement. – Pabluez

Répondre

3

Référez This et This

puis passer une référence à octet [] dans setMultiChoiceItems().

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

vérifier ensuite la valeur de booleans dans setPositiveButton().

Si vous devez passer ce AlertDialog autour, puis étendre AlertDialog et avoir créé un champ booléen tel que décrit dans la section 1.

Questions connexes