9 Stimmen

Warum funktioniert setCanceledOnTouchOutside(false) nicht im Alert-Builder?

Ich habe einen Alert-Dialog in meiner Aktivität und möchte nicht, dass der Benutzer ihn durch Klicken außerhalb des Dialogs schließen kann. Basierend auf meiner Recherche (wie diese) habe ich die setCanceledOnTouchOutside(false); Methode gefunden. Ich konnte sie jedoch nicht in meiner Anwendung verwenden und es ist möglich, den Dialog zu schließen, während ich diese Methode habe.

Das ist mein Code:

private AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setTitle("");
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
        switch (intAlertAction) {
            case 1:
            case 2:
            case 3:
            default:
        }
}
});

Jeder Vorschlag wäre willkommen.

30voto

sdabet Punkte 17841

setCanceledOnTouchOutside verhindert nur das Schließen durch Klicken außerhalb des Dialogfelds. Aber man kann es immer noch beispielsweise mit der Zurück-Taste schließen.

Wenn Sie nicht möchten, dass Ihr Dialogfeld überhaupt abbrechbar ist, verwenden Sie dialog.setCancelable(false)

Ich habe gerade Ihren (korrigierten) Code getestet und er funktioniert wie erwartet: Der Benutzer kann das Dialogfeld nicht schließen, wenn er darauf klickt. Probieren Sie es aus:

AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setTitle("");
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });
alertDialog.show();

7voto

keybee Punkte 1478

Dies ist eine interessante Frage und ich denke, ich kenne deine Antwort.

Ich habe eine Anwendung auf verschiedenen Plattformen getestet und dabei einen kleinen Unterschied zwischen ihnen festgestellt. Ab Android 4.0 verschwindet eine Toast-Nachricht einfach, wenn man sie berührt. Ich vermute, das Gleiche gilt für Dialoge (und AlertDialogs). Sie verschwinden einfach beim Berühren, aber sie werden nicht geschlossen - man kann sie nur nicht mehr sehen.

Hoffentlich hat dir das geholfen!

3voto

the hien duong Punkte 49

Fügen Sie einfach dialog.setCancelable(false) hinzu, um die Zurück-Taste zu deaktivieren.

2voto

Harsh Dev Chandel Punkte 763

Fügen Sie setCancelable(false) in Ihrem AlertDialog hinzu, Beispiel:

AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setCancelable(false);
alertDialog.setTitle("");
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });
alertDialog.show();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X