I am developing an application that when the button is pressed, it opens a dialog with OK and Cancel buttons.
It works fine.
When the user presses the back button, I am handling this as follows
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
}
return super.onKeyDown(keyCode, event);
}
But the above method is not called. How can I handle this?
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;
}
});
Sounds like you want to set the OnCancelListener when you create the Dialog. It looks like this:
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
//do whatever you want the back key to do
}
});
You need to override OnCancel
method. This method calls on Back Key press. Here's code which works perfect to me.
AlertDialog alertDialog;
alertDialog.setOnCancelListener(new OnCancelListener()
{
@Override
public void onCancel(DialogInterface dialog)
{
// TODO Auto-generated method stub
dialog.dismiss();
}
});
Hope this will help you, and accept it if it is helpful to you.
Thanks..
Try this
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;
}
})
it is because when your Dialog opens then your window navigate its focused to Dialog.
So now you have to handle key
on your Dialog.
If you are using a DialogFragment, from what I can tell the right way to do it is to override onCancel()
I noticed setOnCancelListener
does not work, and setOnKeyListener
works, but for me has the fun side effect that it swallows all keys if your dialog has an edit text.
This code works:
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();
来源:https://stackoverflow.com/questions/10346011/how-to-handle-back-button-with-in-the-dialog