69

Is it possible to override onBackPressed() for only one activity ?

On back button click I want to call a dialog on a specific Activity, but in all other activities i want it to work as it worked before (going to previous activities).

EDITED

Thank you everyone for your answers, I already had everything like you told me, but my problem was that when i was clicking back button on another Activity, I was going to my previous Activity (The one where i had back button Overridden) and i thought that it wasn't working, i thought it was overriding onBackPressed() in whole Application, now i got it.

AAEM
  • 1,837
  • 2
  • 18
  • 26
Jilberta
  • 2,836
  • 5
  • 30
  • 44

9 Answers9

156

Yes. Only override it in that one Activity with

@Override
public void onBackPressed()
{
     // code here to show dialog
     super.onBackPressed();  // optional depending on your needs
}

don't put this code in any other Activity

codeMagic
  • 44,549
  • 13
  • 77
  • 93
  • 3
    How above code work in fragment? Is this any solutions – Ganesh Katikar Jul 08 '14 at 06:24
  • hello i have a same problem my activity 2 is going on activity 1 but i do not want to go activity 1 if i clicked back on activity 2 my application should exit. how can i do that ? – Tabish khan Aug 30 '17 at 06:21
  • @Tabishkhan just call `finish()` on activity 1 after starting the intent for activity 2. Then, activity 2 will be the only one in the stack – codeMagic Aug 31 '17 at 00:35
  • @codeMagic how we can reduce duplication of this method? mean I want the same functionality for 5 activities when they click back. So how I can use the same functionality in all activities? – Asif Mushtaq Apr 16 '18 at 19:51
  • @UnKnown create an activity to extend in your others and put the code in that super activity – codeMagic Apr 16 '18 at 20:01
  • @codeMagic how I will access the field of child class in the super activity? which I will use in the `onBackPressed()` – Asif Mushtaq Apr 18 '18 at 17:13
  • @UnKnown if it does the same thing for all then, ideally, it will contain everything it needs to complete. You may be better off creating a question with the relevant code and what isn't working as expected. There may be a better way but this was my first thought. – codeMagic Apr 18 '18 at 17:23
  • @codeMagic here I have asked. https://stackoverflow.com/questions/49906688/how-to-reuse-the-code-for-android – Asif Mushtaq Apr 18 '18 at 18:32
  • @codeMagic `super.onBackPressed();` not an option because without this the activity does not return to a previous screen. – Maihan Nijat Jun 24 '18 at 14:12
  • Leave it empty if you want to prevent going back to previous activity. – Rami Alloush Apr 09 '20 at 19:25
44

Override the onBackPressed() method as per the example by codeMagic, and remove the call to super.onBackPressed(); if you do not want the default action (finishing the current activity) to be executed.

Erastus
  • 441
  • 3
  • 3
5

You may just call the onBackPressed()and if you want some activity to display after the back button you have mention the

Intent intent = new Intent(ResetPinActivity.this, MenuActivity.class);
    startActivity(intent);
    finish();

that worked for me.

Robert
  • 5,278
  • 43
  • 65
  • 115
4

OnBackPressed Deprecated.

Kotlin solution here:

onBackPressedDispatcher.addCallback(object: OnBackPressedCallback(true) {
            /* override back pressing */
            override fun handleOnBackPressed() {
                //Your code here
            }
        })
Rowan Berry
  • 171
  • 7
  • 1
    This answer provides the new approach introduced with Android 13 (SDK 33). You may find more details here [stackoverflow - onBackPressed() deprecated, What is the alternative?](https://stackoverflow.com/questions/72634225/onbackpressed-deprecated-what-is-the-alternative) and a migration guide at [Medium - How To Migrate The Deprecated OnBackPressed Function](https://medium.com/tech-takeaways/how-to-migrate-the-deprecated-onbackpressed-function-e66bb29fa2fd). – Aaron Nov 17 '22 at 10:16
2

Just call the onBackPressed() method in the activity you want to show the dialog and inside it show your dialog.

Pavlos
  • 2,183
  • 2
  • 20
  • 27
2

Just use the following code with initializing a field

private int count = 0;
    @Override
public void onBackPressed() {
    count++;
    if (count >=1) {
        /* If count is greater than 1 ,you can either move to the next 
        activity or just quit. */
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
        finish();
        overridePendingTransition
        (R.anim.push_left_in, R.anim.push_left_out);
        /* Quitting */
        finishAffinity();
    } else {
        Toast.makeText(this, "Press back again to Leave!", Toast.LENGTH_SHORT).show();

        // resetting the counter in 2s
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                count = 0;
            }
        }, 2000);
    }
    super.onBackPressed();
}
Jay Patel
  • 89
  • 7
0

Best and most generic way to control the music is to create a mother Activity in which you override startActivity(Intent intent) - in it you put shouldPlay=true, and onBackPressed() - in it you put shouldPlay = true. onStop - in it you put a conditional mediaPlayer.stop with shouldPlay as condition

Then, just extend the mother activity to all other activities, and no code duplicating is needed.

Prudhvi
  • 2,276
  • 7
  • 34
  • 54
dor00012
  • 362
  • 4
  • 17
0

At first you must consider that if your activity which I called A extends another activity (B) and in both of

them you want to use onbackpressed function then every code you have in B runs in A too. So if you want to separate these you should separate them. It means that A should not extend B , then you can have onbackpressed separately for each of them.

Homa
  • 49
  • 3
0

Try This Its working

  @Override
public void onBackPressed(){
        super.onBackPressed();
         Intent i=new Intent(Intent.ACTION_MAIN);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        finish();
}
Tabish khan
  • 772
  • 8
  • 11