web-dev-qa-db-ger.com

Wie gehe ich mit dem Zurück-Button im Dialog um?

Ich entwickle eine Anwendung, die beim Drücken der Schaltfläche einen Dialog mit den Schaltflächen OK und Abbrechen öffnet.

Es funktioniert gut.

Wenn der Benutzer die Zurück-Taste drückt, gehe ich wie folgt vor

public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    {

    }
 return super.onKeyDown(keyCode, event);
}

Die obige Methode wird jedoch nicht aufgerufen. Wie kann ich damit umgehen?

87
kiran
dialog.setOnKeyListener(new Dialog.OnKeyListener() {

            @Override
            public boolean onKey(DialogInterface arg0, int keyCode,
                    KeyEvent event) {
                // TODO Auto-generated method stub
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    finish();
                    dialog.dismiss();
                }
                return true;
            }
        });
218
Yasin Hassanien

Klingt, als würden Sie den OnCancelListener beim Erstellen des Dialogs festlegen Es sieht aus wie das:

dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {         
    @Override
    public void onCancel(DialogInterface dialog) {
        //do whatever you want the back key to do
    }
});
107
alexc

Sie müssen die OnCancel-Methode überschreiben. Diese Methode erfordert das Drücken der Zurück-Taste. Hier ist ein Code, der für mich perfekt funktioniert.

 AlertDialog alertDialog;

    alertDialog.setOnCancelListener(new OnCancelListener() 
    {                   
           @Override
            public void onCancel(DialogInterface dialog) 
             {
               // TODO Auto-generated method stub

                    dialog.dismiss();                           

            }
}); 

Hoffen Sie, dass dies Ihnen helfen wird, und akzeptieren Sie es, wenn es Ihnen hilft.

Vielen Dank..

19
Never Quit

Versuche dies

 new AlertDialog.Builder(this).setOnKeyListener(new DialogInterface.OnKeyListener() {

                        @Override
                        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {

                            if(keyCode == KeyEvent.KEYCODE_BACK){
                                Logger.d(TAG, "--------- Do Something -----------");
                                return true;
                            }
                            return false;


                        }
                    })
6
NitZRobotKoder

dies liegt daran, dass sich Ihr Fenster beim Öffnen Ihres Dialogs fokussiert zu Dialog ..__ bewegt. Jetzt müssen Sie in Ihrem Dialog mit key umgehen.

1
Azhar Shaikh

Wenn Sie ein DialogFragment verwenden, können Sie, soweit ich das beurteilen kann, die richtige Methode besteht darin, onCancel () zu überschreiben

Ich habe bemerkt, dass setOnCancelListener nicht funktioniert und setOnKeyListener funktioniert, aber für mich hat es den lustigen Nebeneffekt, dass es alle Tasten verschluckt, wenn Ihr Dialog einen Bearbeitungstext enthält.

1
Daniel Wilson

Dieser Code funktioniert: 

    Dialog dlg = new Dialog(thisAct, R.style.DialogTheme);
    dlg.setContentView(view);
    dlg.setCancelable(false);
    dlg.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
    dlg.setOnKeyListener((arg0, keyCode, event) -> {
        Timber.d("onKey(%d)", keyCode);
        //{home intercepting
        if ((keyCode == KeyEvent.KEYCODE_HOME)) {
            Timber.i("HOME pressed");
            return true;
        }

        return true;
    });
    dlg.show();
0
Andrew Glukhoff