Android AlertDialog avec changement dynamique de texte sur chaque demande
Je veux montrer un AlertDialog avec une option qui peut changer à chaque requête. Ainsi, par exemple, à un moment j'en veux pour preuve l'option "ajouter aux contacts", tandis que d'un autre temps, il faut "retirer des contacts".
Mon code fonctionne bien sur la première fois, cependant, Android semble cache l'AlertDialog de sorte que onCreateDialog n'est pas exécuté la prochaine fois. Par conséquent, l'option de ne plus rien faire. Puis-je éviter la mise en cache, ou est-il juste une autre façon de changer l'option?
Je suis en train de travailler avec le SDK 1.5 mais en utilisant 1.1.
@Override
protected Dialog onCreateDialog(final int id) {
...
String add_remove_contact = res.getString(R.string.profile_add_to_contacts);
if (user.getContacts().contains(profileID)) {
add_remove_contact = res.getString(R.string.profile_remove_from_contacts);
//TODO: this string is not changed when contact status changes
}
final CharSequence[] items = {res.getString(R.string.view_profile),
res.getString(R.string.profile_send_message),
add_remove_contact};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
...
return builder.create();
}
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également utiliser le removeDialog(int) fonction de l'Activité. Lorsqu'une boîte de dialogue est fermée, l'Activité essentiellement des magasins de l'état de la boîte de dialogue (pour des raisons de performances, j'imagine). L'appel de removeDialog(int) dans la boîte de dialogue des forces de l'activité de décharger toutes les références pour le dialogue et le congédie à partir de l'écran si il est illustré.
Création De Boîtes De Dialogue
Activité#removeDialog(int)
removeDialog
etshowDialog
sont désormais obsolète. Comme Android déménagé àFragments
, l'utilisation deDialogFragment
est maintenant recommandé. Pour plus d'informations, voici un lien vers la documentation officielle: developer.android.com/reference/android/app/DialogFragment.htmlPrendre un coup d'oeil à onPrepareDialog méthode qui sera appelée avant que la boîte de dialogue est affichée. Là, Vous pouvez modifier les valeurs requises, basé sur le type de demande.
Exemple avec sélecteur de date
C'est une dup de cette question:
Android: vous ne Pouvez pas modifier le texte apparaît dans AlertDialog
Vous pouvez également le faire de cette façon:
http://andmobidev.blogspot.com/2010/03/modifying-alert-dialogs-list-items.html
Ne semble pas ralentir l'affichage du menu appuyez de manière prolongée sur si...
Je pense que j'ai un fix pour le comportement incohérent mentionnés ci-dessus. Lors de la création initiale de la boîte de dialogue (quand il est encore un AlertDialog.Générateur de), vous devez définir le message à un état initial (non nul) ou onPrepareDialog ne sera PAS remplacer par la valeur prévue. Ainsi, lorsque vous êtes en train de créer le dialogue, faire quelque chose comme cela pour toujours avoir une valeur non nulle dans le message. J'ai du mal avec cette pendant des jours et a trouvé cette solution par accident:
Je comprends les raisons de performances pour l'utilisation de maîtriser l'activité de dialogues, mais recommande qu'ils ne sont pas utilisés, sauf pour les cas simples. Les raisons pour cela sont:
Le Bundle argument n'a été ajouté dans l'API de Niveau 8, ne peut donc pas être adopté pour des raisons de compatibilité ascendante. Cela signifie effectivement que "onPrepareDialog" doit s'appuyer sur la non-variables locales pour l'état de différences;
Pratique indique pauvres et des comportements incohérents, en réponse à une boîte de dialogue modifications faites dans le corps de 'onPrepareDialog'.
Aucune de ces difficultés surviennent si les Dialogues sont sous-classé et créés en fonction des besoins. 'setOwnerActivity" peut être appelée que si nécessaire.
Lorsque vous avez un dialogue personnalisé, vous pouvez modifier les éléments personnalisés en utilisant la boîte de dialogue.getWindow().findViewById(...)
Cet exemple enregistrer le dernier texte et de l'afficher à nouveau la prochaine fois que vous afficher la boîte de dialogue.
Personnalisé de la boîte de dialogue xml:
Et j'ai eu une idée, mais pas très bon.*Il est utilisé lorsque les utilisateurs de ne pas utiliser la boîte de dialogue assez fréquemment!*La solution :tout d'abord,vous devez déclarer une variable (de type int) et rendre la valeur par défaut la valeur 0.comme
private int i=0;
et avant d'utiliser le showDialog méthodes d'Activité,l'augmentation de la variable int i et post la valeur que j'ai en tant que paramètre comme méthode showDialog.
le code peut comme ce
exactement. pour AlertDialog, qui a été créé w/
Builder.create()
,onPrepareDialog()
est inutile. Builder est un moyen qu'une fois la boîte de dialogue est créé, vous ne pouvez pas mettre à jour. je veux dire ne peut pas lâche, je suis sûr que vous pourriez obtenir une poignée à la vue de tout faire manuellement, mais qui l'emporte sur le point de l'utilisation du générateur en premier lieu.la seule solution que j'ai trouvé est de créer manuellement /afficher /fermer la boîte de dialogue au lieu d'utiliser
onCreateDialog()
,showDialog()
, etc. j'ai essayé d'appelerremoveDialog()
, mais cela ne semble pas fonctionner.