Die setCancelable (false) -Methode von AlertDialog funktioniert nicht


70

Ich hatte einen AlertDialog erstellt, der einwandfrei funktioniert. Es verschwindet, wenn ich drücke:
1) Escape-Tastaturtaste oder
2) Zurück-Taste mit der Maus
Damit es auch unter den oben angegebenen Bedingungen fokussiert bleibt, habe ich beim Erstellen die Anweisung '.setCancelable (false)' hinzugefügt. Aber ich sehe immer noch, wie der Dialog verschwindet. Wo ist das Problem? Bitte helfen Sie.

Code hinzugefügt:

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 unter XP Professional.


Kannst du bitte deinen Code hochladen?
Luzifer

'.setCancelable (false)' steht in der vierten Zeile des Codes.
Lupchiazoem

Warum setzen Sie das setNegativeButton()Teil ein, wenn Sie nicht möchten, dass Ihr Dialog abgebrochen werden kann?
Anasthase

@Anasthase - Ich möchte die Antwort des Benutzers in Bezug auf Ja oder Nein erfassen.
Lupchiazoem

1
dialog.setCanceledOnTouchOutside (false)
Mirza Adil

Antworten:


136

Ist das Ihr vollständiger Code? dann bitte Ihren Code ändern für die Einstellung setCancelable(false)wie folgt aus

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

Ja, es hat geholfen. Vielen Dank für Ihre Antwort. Eigentlich habe ich eine Antwort verfasst und in der Zwischenzeit haben Sie Ihre veröffentlicht.
Lupchiazoem

18
Alle - Wie es Ihnen vielleicht hilft, setCancelable(false)funktionieren diese Informationen - funktionieren im obigen Code nicht, da die AlertDialogErstellung Teil der DialogFragmentKlasse ist. Bitte klicken Sie auf "diesen" Link in der obigen Antwort, der auf den vollständigen Code verweist. Aus der DialogFragmentKlassenbeschreibung - "Dieses Fragment enthält ein Dialogobjekt, das je nach Status des Fragments entsprechend angezeigt wird. Die Steuerung des Dialogfelds (Entscheidung, wann es angezeigt, ausgeblendet oder geschlossen werden soll) sollte hier über die API erfolgen, nicht bei direkten Aufrufen im Dialog. ".
Lupchiazoem

Link ist unterbrochen. Versuchen Sie, eine Antwort zu
formulieren

13

Ihr Dialogfeld ist auf "Nicht stornierbar" eingestellt, Ihr Hostfragment ist jedoch weiterhin stornierbar. Setze dein Fragment mit setCancelable(false).


Wenn Sie möchten, dass Ihr Dialogfeld abgebrochen werden kann, indem Sie außerhalb klicken, aber auch benachrichtigt werden möchten, dass es abgebrochen wurde, setzen Sie Abbrechen (true) und überschreiben Sie die Methode zum Abbrechen von Dialogen. @Override public void cancel () {
pstorli

9

Ein weiteres Arbeitsbeispiel:

Schritt 1

Klasse erstellen:

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();
   }
}

Schritt 2

Methode hinzufügen zu Activity:

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

Schritt 3

Rufen showDialog()Sie an, wenn Sie einen Dialog anzeigen müssen


7
dialog.setCanceledOnTouchOutside(false);

setCanceledOnTouchOutside(boolean)

Legt fest, ob dieser Dialog abgebrochen wird, wenn er außerhalb der Fenstergrenzen berührt wird. Wenn true festgelegt ist, wird der Dialog als abbrechbar festgelegt, sofern er nicht bereits festgelegt wurde.


2

Der einfachste Weg, "setCancelable" zu implementieren, besteht darin, dasselbe zu implementieren, wenn Sie den Dialog in der Aktivität aufrufen. Auf diese Weise nicht direkt in der Dialogklasse.

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


0

Abhängig von Ihrem AlertDialogTyp können Sie:

AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.MyAlertDialogLayout).setCancelable(false);

oder

AlertDialog alertDialog = builder.create();

alertDialog.setCancelable(false);

0

In DialogFragment

Gebraucht:-

dialog.setCanceledOnTouchOutside(false)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.