Ce billet servira plus de mémo que de vrai post pour les développeurs Android. En Java, pour afficher une boite de dialogue de confirmation, il existe la méthode :

JOptionPane.ShowXXXDialog();

Ces boîtes de dialogue sont dites modale et synchrone. Cela signifie que lorsqu’une boîte de dialogue apparait, l’utilisateur ne peut que cliquer sur cette boîte. Le fait d’être synchrone implique que la méthode retourne une valeur exploitable.

Si on prend cet exemple :

int reponse = JOptionPane.ShowConfirmDialog(null, "Voulez-vous supprimer ce fichier ?", "Confirmation", JOptionPane.YES_NO_OPTION);
if (reponse == JOptionPane.YES_OPTION) { 
       // Traitement 
}

Le programme attend que l’utilisateur ai cliqué sur un bouton pour continuer.

Sous Android, cette méthode n’existe pas. De plus, l’utilisation des boîtes de dialogue est légèrement différente. Les boîtes sont toujours modales, mais ne sont plus synchrone. Cela signifie que les boîtes de dialogues ne retournent pas de valeur, et que le programme n’attend pas que l’utilisateur ai cliqué pour continuer. Il faut donc utiliser ce qui s’appelle des  »call-back ». Il faut donc définir une ‘call-back’ par réponse (Par exemple, une pour le bouton « Oui », une autre pour le bouton « Non », encore une autre pour « Annuler », etc…). La création d’une boîte de dialogue ressemble donc à :

Activity activity = this; // récupération de l'Activity courante 
AlertDialog.Builder builder = new AlertDialog.Builder(activity); // Création de la boîte de dialogue 
builder.setMessage("Voulez-vous supprimer ce fichier ?"); 
// définition de la callback pour la réponse Oui 
builder.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
    @Override public void onClick(DialogInterface dialog, int which) { 
        // ... action si réponse = Oui 
    } 
}); 
// définition de la callback pour la réponse Non 
builder.setNegativeButton("Non", new DialogInterface.OnClickListener() {
    @Override public void onClick(DialogInterface dialog, int which) { 
        // ... action si réponse = Non 
    } 
}); 
builder.show(); 
// ne retourne pas le choix de l'utilisateur 
// arrivé ici, l'utilisateur n'a peut être pas 
// encore répondu à la question (car appel asynchrone)

Il est tout a fait possible de ne pas créer d’action pour une action :

// On ne fait rien en cas de choix "Non"
builder.setNegativeButton("Non", null);

Source : Le blog de Fabien DUMINY

2 commentaires on “Une JOptionPane sous Android

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.