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.

Lupchiazoem
quelle
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");
}
Sandig
quelle
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).

Grün
quelle
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

Krzysztof Dziuba
quelle
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.

DoruChidean
quelle
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;
Laiane Oliveira
quelle
1

In Kotlin, um den Dialog nicht abzulehnen

dialog.isCancelable =false
Pratham Kesarkar
quelle
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);
Mohsen Emami
quelle
0

In DialogFragment

Gebraucht:-

dialog.setCanceledOnTouchOutside(false)

Mirza Adil
quelle