Comment puis-je ajouter un troisième bouton à une boîte de dialogue d'alerte Android?

Réponses:

136

Cet extrait de code devrait vous aider à expliquer les trois différents boutons que vous pouvez utiliser:

    alertDialog = new AlertDialog.Builder(this).create();

    alertDialog.setTitle("Dialog Button");

    alertDialog.setMessage("This is a three-button dialog!");

    alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "Button 1 Text", new DialogInterface.OnClickListener() {

      public void onClick(DialogInterface dialog, int id) {

        //...

    } }); 

    alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Button 2 Text", new DialogInterface.OnClickListener() {

      public void onClick(DialogInterface dialog, int id) {

        //...

    }}); 

    alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "Button 3 Text", new DialogInterface.OnClickListener() {

      public void onClick(DialogInterface dialog, int id) {

        //...

    }});
sahhhm
la source
29
Cette obsolète ... jetez un œil à ma réponse.
ninjasense
1
@ninjasense, j'ai réalisé et édité pendant que vous écriviez votre réponse. Merci!
sahhhm
225

Lorsque vous créez la boîte de dialogue, ajoutez quelque chose comme ceci au générateur:

builder = new AlertDialog.Builder(context);
builder.setTitle("Test");
builder.setIcon(R.drawable.icon);
builder.setMessage("test");
builder.setPositiveButton("Call Now",
        new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {
                dialog.cancel();
            }
        });

builder.setNeutralButton("Setup",
        new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {
                context.startActivity(new Intent(context, Setup.class));
                //dialog.cancel();
            }
        });

builder.setNegativeButton("Exit",
        new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {
                dialog.cancel();
            }
        });
builder.create().show();
ninjasense
la source
2
@ninjasense Est-il possible d'ajouter le 4ème bouton à la boîte de dialogue d'alerte?
Geek
4
dans ce cas - non. Vous devez créer une vue personnalisée.
AndrewS
La création d'une boîte de dialogue d'alerte personnalisée est plus précise. stackoverflow.com/questions/13341560/…
EJ Chathuranga
50

Ajoutez n'importe quel nombre de boutons sans xml:

    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("Title");
    builder.setItems(new CharSequence[]
            {"button 1", "button 2", "button 3", "button 4"},
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    // The 'which' argument contains the index position
                    // of the selected item
                    switch (which) {
                        case 0:
                            Toast.makeText(context, "clicked 1", 0).show();
                            break;
                        case 1:
                            Toast.makeText(context, "clicked 2", 0).show();
                            break;
                        case 2:
                            Toast.makeText(context, "clicked 3", 0).show();
                            break;
                        case 3:
                            Toast.makeText(context, "clicked 4", 0).show();
                            break;
                    }
                }
            });
    builder.create().show();
Oded Breiner
la source
3
Cette solution ne consiste pas à ajouter des boutons, par exemple "OK", "Annuler", etc., mais plutôt à définir les éléments à afficher dans la liste de choix, par exemple, "Option 1", "Option 2", etc. question mentionne que "le SDK ne permet qu'un bouton positif et négatif", cela ne répond pas à la manière de surmonter cette limitation.
d60402
3
@ d60402 - vous avez un bon point, mais si un développeur cherchant un moyen de créer une boîte de dialogue avec plus de 2 boutons tombe sur cette réponse ... Avoir cette option est très utile car elle est plus flexible avec le nombre de boutons. Pour le dire différemment, si les boutons positifs et négatifs ne suffisent pas pour ce que vous faites, 3 boutons peuvent devenir 4 assez rapidement. D'où les votes.
Oded Breiner
@ d60402 Le titre de la question est comment ajouter un troisième bouton, pas comment afficher le bouton neutre.
Boris Treukhov
@Boris Treukhov - Si la boîte de dialogue a un bouton positif et un bouton négatif, cela signifie que la boîte de dialogue a deux boutons. L'ajout du bouton neutre donnerait à la boîte de dialogue le troisième bouton. C'est essentiellement ce que font les deux principales réponses à cette question.
d60402
Comme indiqué dans stackoverflow.com/a/19658646/2914140 , cette solution affichera des boutons lorsqu'il n'y a pas de boîte de dialogue définie.
CoolMind
5
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    this);

            // set title
            alertDialogBuilder.setTitle("To Do List");

            // set dialog message
            alertDialogBuilder
                    .setMessage("What do you want?")
                    .setCancelable(false)
                    .setPositiveButton("Delete All", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            // if this button is clicked, close
                            // current activity




                            dialog.cancel();


                        }
                    }).setNeutralButton("Delete", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // if this button is clicked, close
                    // current activity




                    dialog.cancel();

                }
            })
                    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            // if this button is clicked, just close
                            // the dialog box and do nothing

                            dialog.cancel();
                        }
                    });

            // create alert dialog
            AlertDialog alertDialog = alertDialogBuilder.create();

            // show it
            alertDialog.show();
Nirav Bhavsar
la source
1
Quelle est la différence avec les 2 premières réponses?
FindOutIslamNow