web-dev-qa-db-fra.com

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

J'avais créé un AlertDialog qui fonctionne bien. Il est en train de disparaître si je presse:
1) touche d'échappement du clavier ou 
2) bouton de retour utilisant la souris 
Pour rester concentré même sur les conditions énoncées ci-dessus, j'avais ajouté la déclaration '.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 Professional.

55
lupchiazoem

Est-ce que ceci votre code complet? alors s'il vous plaît changez votre code pour configurer setCancelable(false) comme ceci 

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

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

11
Green

Un autre exemple de travail:

É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

6
Krzysztof Dziuba
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 la valeur est true, la boîte de dialogue est annulable si elle n’a pas déjà été définie.

3
DoruChidean

Le moyen le plus simple d'implémenter "setCancelable" consiste à l'implémenter lors de l'appel du 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;
0
Laiane Oliveira

En Kotlin pour avoir rendu le dialogue non-licenciable

dialog.isCancelable =false
0
pratham kesarkar