378 votes

Comment afficher une boîte de dialogue Oui / Non dans Android?

Oui, je sais qu'il y a AlertDialog.Builder, mais je suis choqué de savoir à quel point il est difficile (enfin, pas du tout convivial) d'afficher un dialogue sous Android.

J'avais l'habitude d'être un développeur. Net, et je me demande s'il existe un équivalent Android de ce qui suit?

 if (MessageBox.Show("Are You Sure?", "", MessageBoxButtons.YesNo) == DialogResult.Yes)

{

                //Do something...

}
 

Merci pour votre contribution.

770voto

Steve Haley Points 26928

AlertDialog.Builder n'est vraiment pas si difficile à utiliser. C'est un peu intimidant au premier abord, mais une fois que vous l'utilisez un peu, c'est à la fois simple et puissant. Je sais que vous avez dit que vous savez comment l'utiliser, mais voici un exemple simple:

 DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which){
        case DialogInterface.BUTTON_POSITIVE:
            //Yes button clicked
            break;

        case DialogInterface.BUTTON_NEGATIVE:
            //No button clicked
            break;
        }
    }
};

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener)
    .setNegativeButton("No", dialogClickListener).show();
 

Vous pouvez également réutiliser ce DialogInterface.OnClickListener si vous avez d'autres cases oui / non qui devraient faire la même chose.

171voto

nikki Points 1062

essaye ça:

 AlertDialog.Builder builder = new AlertDialog.Builder(this);

    builder.setTitle("Confirm");
    builder.setMessage("Are you sure?");

    builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            // Do nothing but close the dialog

            dialog.dismiss();
        }

    });

    builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // Do nothing
            dialog.dismiss();
        }
    });

    AlertDialog alert = builder.create();
    alert.show();
 

34voto

Erich Douglass Points 21714

Steve H réponse est sur place, mais voici un peu plus d'informations: la raison pour laquelle les dialogues fonctionnent de la manière dont ils le font est parce que les boîtes de dialogue d'Android sont asynchrones (exécution ne s'arrête pas lorsque la boîte de dialogue est affichée). De ce fait, vous devez utiliser un callback pour gérer la sélection de l'utilisateur.

Découvrez cette question pour une plus longue discussion entre les différences dans Android et .NET (en ce qui concerne les boîtes de dialogue): http://stackoverflow.com/questions/2028697/dialogs-alertdialogs-how-to-block-execution-while-dialog-is-up-net-style

5voto

Warpzit Points 11150

La réponse de Steves est correcte mais obsolète avec des fragments. Voici un exemple avec FragmentDialog.

La classe:

 public class SomeDialog extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity())
            .setTitle("Title")
            .setMessage("Sure you wanna do this!")
            .setNegativeButton(android.R.string.no, new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // do nothing (will close dialog)
                }
            })
            .setPositiveButton(android.R.string.yes,  new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // do something
                }
            })
            .create();
    }
}
 

Pour démarrer le dialogue:

             FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            // Create and show the dialog.
            SomeDialog newFragment = new SomeDialog ();
            newFragment.show(ft, "dialog");
 

Vous pouvez également laisser la classe implémenter onClickListener et l'utiliser à la place des écouteurs intégrés.

5voto

CrandellWS Points 109

Merci Nikki votre réponse m'a aidé à améliorer un existant simplement en ajoutant mon action souhaitée comme suit

 AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle("Do this action");
builder.setMessage("do you want confirm this action?");

builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int which) {
        // Do do my action here

        dialog.dismiss();
    }

});

builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // I do not need any action here you might
        dialog.dismiss();
    }
});

AlertDialog alert = builder.create();
alert.show();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X