78 votes

La méthode setCancelable(false) d'AlertDialog ne fonctionne pas

J'avais créé un AlertDialog qui fonctionne bien. Il disparaît, si j'appuie sur : 1) bouton d'échappement du clavier ou 2) bouton de retour à l'aide de la souris Pour qu'il reste concentré même sur les conditions ci-dessus, j'avais ajouté l'instruction '.setCancelable(false)' lors de la construction. Mais, je vois toujours le dialogue disparaître. Où est le problème? S'il vous plaît aider.

Code ajouté :

 return new AlertDialog.Builder(getActivity())
                .setIcon(R.drawable.alert_dialog_icon)
                .setTitle(title)
                .setCancelable(false)
                .setPositiveButton(R.string.alert_dialog_ok,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            ((FragmentAlertDialog)getActivity()).doPositiveClick();
                        }
                    }
                )
                .setNegativeButton(R.string.alert_dialog_cancel,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            ((FragmentAlertDialog)getActivity()).doNegativeClick();
                        }
                    }
                )
                .create();

Env : Android 4.0 sur XP Professionnel.

143voto

Sandy Points 2687

Est - ce votre code complet? alors s'il vous plaît changer votre code pour définir setCancelable(false) comme ceci

 void showDialog() {
    DialogFragment newFragment = MyAlertDialogFragment.newInstance(
            R.string..alert_dialog_two_buttons_title);
    newFragment.setCancelable(false);
    newFragment.show(getFragmentManager(), "dialog");
}

16voto

Green Points 141

Votre boîte de dialogue est définie sur non annulable, mais votre fragment hôte est toujours annulable. Définissez votre fragment avec setCancelable(false) .

10voto

Krzysztof Dziuba Points 310

Autre exemple fonctionnel :

Étape 1

Créer une classe :

 public class DialogActivity extends android.app.DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(R.string.myMessage);
        setCancelable(false);
        return builder.create();
   }
}

Étape 2

Ajouter une méthode à votre Activity :

 private boolean showDialog() {
    FragmentManager manager = getFragmentManager();
    DialogActivity dialogActivity;
    dialogActivity = new DialogActivity();
    dialogActivity.show(manager, "DialogActivity");
    return true;
}

Étape 3

Appelez showDialog() lorsque vous devez afficher la boîte de dialogue

9voto

DoruChidean Points 3188
dialog.setCanceledOnTouchOutside(false);

setCanceledOnTouchOutside(boolean)

Définit si cette boîte de dialogue est annulée lorsqu'elle est touchée en dehors des limites de la fenêtre. Si elle est définie sur true, la boîte de dialogue est définie pour être annulable si elle n'est pas déjà définie.

2voto

Laiane Oliveira Points 29

La façon la plus simple d'implémenter "setCancelable" est d'implémenter la même chose lors de l'appel de la boîte de dialogue dans l'activité ; De cette façon, pas directement dans la classe de dialogue.

  Dialog myDialog = new Dialog();
        myDialog.setCancelable( false );
        myDialog.show( getSupportFragmentManager(),"dialog" );
        return true;

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