How to handle Back button with in the dialog?

AndroidButtonDialogBack

Android Problem Overview


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?

Android Solutions


Solution 1 - Android

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

Solution 2 - Android

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

Solution 3 - Android

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..

Solution 4 - Android

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

Solution 5 - Android

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.

Solution 6 - Android

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.

Solution 7 - Android

Override method onBackPressed() in your own dialog and use it in your code:

public class MyDialog extends Dialog {
    
    public MyDialog(@NonNull Context context) {
        super(context);
    }

    @Override
    public void onBackPressed() {
        // Do what you want
    }
}

Use:

MyDialog dlg = new MyDialog(context);
dlg.show();

Solution 8 - Android

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

Solution 9 - Android

For Kotlin:

I tried this and that is working fine for me.

dialog.setOnKeyListener { _, keyCode, _ ->
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            //do to task here
        }
        true
    }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionkiranView Question on Stackoverflow
Solution 1 - AndroidYasin HassanienView Answer on Stackoverflow
Solution 2 - AndroidalexcView Answer on Stackoverflow
Solution 3 - AndroidNever QuitView Answer on Stackoverflow
Solution 4 - AndroidNitZRobotKoderView Answer on Stackoverflow
Solution 5 - AndroidDaniel WilsonView Answer on Stackoverflow
Solution 6 - AndroidMohammed Azharuddin ShaikhView Answer on Stackoverflow
Solution 7 - AndroidsantamoniyaView Answer on Stackoverflow
Solution 8 - AndroidAndrew GlukhoffView Answer on Stackoverflow
Solution 9 - AndroidGhayasView Answer on Stackoverflow