web-dev-qa-db-fra.com

Android Boîte de dialogue d'alerte avec un, deux et trois boutons

Je ne fais pas des alertes très souvent, mais chaque fois que je le fais, il me faut un certain temps pour lire la documentation et comprendre comment le faire. Comme je suis obligé de faire cela à quelques reprises maintenant, je vais écrire ci-dessous une réponse à laquelle je pourrai revenir ultérieurement. Plus précisément, je veux comparer le code de base pour

  • Un bouton (OK)
  • Deux boutons (OK et Annuler)
  • Trois boutons (positif, négatif, autre)

Il serait bien d’avoir le code de base pour ces trois types d’alerte courants en un seul endroit pour pouvoir le consulter et le modifier facilement à l’avenir. Cette question demande comment faire pour un bouton.

J'ajoute ma réponse ci-dessous.

21
Suragch

Un bouton

enter image description here

import Android.support.v7.app.AlertDialog;

public class MainActivity extends AppCompatActivity {

    public void showAlertDialogButtonClicked(View view) {

        // setup the alert builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("My title");
        builder.setMessage("This is my message.");

        // add a button
        builder.setPositiveButton("OK", null);

        // create and show the alert dialog
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

Deux boutons

enter image description here

public class MainActivity extends AppCompatActivity {

    public void showAlertDialogButtonClicked(View view) {

        // setup the alert builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("AlertDialog");
        builder.setMessage("Would you like to continue learning how to use Android alerts?");

        // add the buttons
        builder.setPositiveButton("Continue", null);
        builder.setNegativeButton("Cancel", null);

        // create and show the alert dialog
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

Trois boutons

enter image description here

public class MainActivity extends AppCompatActivity {

    public void showAlertDialogButtonClicked(View view) {

        // setup the alert builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Notice");
        builder.setMessage("Launching this missile will destroy the entire universe. Is this what you intended to do?");

        // add the buttons
        builder.setPositiveButton("Launch missile", null);
        builder.setNeutralButton("Remind me later", null);
        builder.setNegativeButton("Cancel", null);

        // create and show the alert dialog
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

Si le texte du bouton est trop long pour que tout le monde puisse être placé horizontalement, il sera automatiquement mis en forme dans une colonne verticale de trois boutons.

enter image description here

Gestion des clics de bouton

Le OnClickListener était null dans les exemples ci-dessus. Vous pouvez remplacer null par un écouteur pour faire quelque chose lorsque l'utilisateur appuie sur un bouton. Par exemple:

builder.setPositiveButton("Launch missile", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

        // do something like...
        launchMissile();
    }
});

Continuer

Il y a beaucoup plus de variétés de dialogues que vous pouvez créer. Voir le documentation pour obtenir de l'aide à ce sujet.

Comme seuls trois boutons sont pris en charge dans un AlertDialog, voici un exemple de dialogue avec une liste.

enter image description here

public class MainActivity extends AppCompatActivity {

    public void showAlertDialogButtonClicked(View view) {

        // setup the alert builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Choose an animal");

        // add a list
        String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
        builder.setItems(animals, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                    case 0: // horse
                    case 1: // cow
                    case 2: // camel
                    case 3: // sheep
                    case 4: // goat
                }
            }
        });

        // create and show the alert dialog
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

Voir cette réponse pour des exemples similaires d'une liste de boutons radio et d'une liste de cases à cocher.

Remarques

  • Utilisez des ressources de chaîne plutôt que des chaînes codées en dur.
  • Vous pouvez envelopper tout dans une classe qui étend DialogFragment pour une réutilisation facile d'un dialogue. (Voir this pour obtenir de l'aide.)
  • Ces exemples utilisaient la bibliothèque de support pour prendre en charge les versions antérieures à API 11. Donc, l'importation devrait être

    import Android.support.v7.app.AlertDialog;
    
  • J'ai omis la méthode onCreate dans les exemples ci-dessus par souci de brièveté. Il n'y avait rien de spécial là-bas.

Voir également

86
Suragch