Search code examples
androidandroid-fragmentsonbackpressedfragmentmanager

Why is activity's onBackPressed not getting called?


I am overriding the onBackPressed method in activity:

 @Override
public void onBackPressed() {
    super.onBackPressed();
}

And I am adding up fragments as follows:

    fragmentManager.beginTransaction()
                .add(R.id.frame_container, myFragment).addToBackStack("").commit();

The problem is my onBackPressed is not getting called in the activity. But when I change it to :

replace(R.id.frame_container, myFragment).addToBackStack("").commit();

it gets called as expected. I have to add the fragments. How to solve this issue?


Solution

  • @Override
    public boolean onKeyUp(int keyCode, KeyEvent objEvent) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            onBackPressed();
            return true;
        }
        return super.onKeyUp(keyCode, objEvent);
    }
    
    @Override
    public void onBackPressed() {
    
        goBack();
    }
    
    public void goBack() {
    
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(
                MyCaseActivity.this);
    
        alertDialog.setTitle("");
        alertDialog.setMessage("Are you sure you want to exit?");
    
        alertDialog.setPositiveButton("YES",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                        System.exit(0);
                    }
                });
    
        alertDialog.setNegativeButton("NO",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });
    
        alertDialog.show();
    }
    

    This works for me.