Search code examples
androidandroid-intentandroid-activity

Make the "up" button behave like the "back" button on Android


The Android app design I'm working with calls for the "Up" button to behave the same way the "Back" button behaves, but I'm not sure how to make that happen.

I know that android:parentActivityName must be specified for the "Up" button to be visible on an activity, but specifying a fixed parent activity doesn't really make sense for the activity. Imagine this scenario with activities A, B, and C:

  1. Launch into activity A, it contains two buttons: each taking you to activities B and C, respectively.
  2. Tap the button for activity B.
  3. Transition to activity B. it contains two buttons: each taking you to activities A and C, respectively.
  4. Tap the button for activity C.
  5. Transition to activity C.
  6. Tap the "up" button, you should be taken to activity B.
  7. On activity B now: tap the button for activity A.
  8. Transition to activity A.
  9. Tap the "up" button, you should be taken to activity B.
  10. On activity B Tap the "up" button, you should be taken to activity A.
  11. On activity A now: tap the button for activity C.
  12. Transition to activity C.
  13. Tap the "up" button, you should be taken to activity A.

If I were to specify android:parentActivityName for each activity, it might make sense to have B and C's parent activity be A, but this means that each time we hit the "up" button from activities B or C, we land at activity A (and that's not always what is supposed to happen).

Does anybody have experience with this type of thing?


Solution

  • from all three of your activities add the following

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                onBackPressed();
                return true;
        }
    
        return(super.onOptionsItemSelected(item));
    }
    

    when you press the up button on your app it will invoke onOptionsItemSelected with the id of android.R.id.home just catch that case and manually call onBackPressed()