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