28

i know how to cancel back keypress, so that the activity / main window stays visible:

public void onBackPressed() {
    return;             
}

my aim is to hide the activity, however, without finishing it, how do you do that in the onBackPressed event?

i.e. I would like to get as far as onPause(), but not evoke the onBackPressed() default behaviour that essentially calls finish(). another way to put it is that i would like to mimic onUserLeaveHint() ?

any help appreciated!

Cel
  • 6,467
  • 8
  • 75
  • 110

4 Answers4

64

If you want to mimic the "Home" button on specific Activities just do this:

Below API 5:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Above and on API 5:

@Override
public void onBackPressed() {
  moveTaskToBack(true);
}

It will move the Task to background.. when you return, it will be as it was.

You can see more information about this here: Override back button to act like home button

Community
  • 1
  • 1
neteinstein
  • 17,529
  • 11
  • 93
  • 123
18

If you want to mimic the "Home" button on specific Activities :

1st Method :

@Override
public void onBackPressed() {
   Log.d("CDA", "onBackPressed Called");
   Intent setIntent = new Intent(Intent.ACTION_MAIN);
   setIntent.addCategory(Intent.CATEGORY_HOME);
   setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   startActivity(setIntent);
}

2nd Method :

@Override
public void onBackPressed() {
   moveTaskToBack(true);
}

And if you want to move to the previous activity without destroying current :

@Override
public void onBackPressed() {
    startActivity(new Intent(CurrentActivity.this, DestinationActivity.class);
}

And now from any activity if you want to open the activity which is in Background . I name CurrentActivity. you could call it form anywhere..like..it wil take that actvity and put it to top of stack . and open it where you left off.

Intent intent = new Intent(FromAnyActivity.this, CurrentActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

Flags :

FLAG_ACTIVITY_REORDER_TO_FRONT : To reorder the activity from stack

FLAG_ACTIVITY_CLEAR_TOP : To remove all the activities from the top

Omar
  • 1,430
  • 1
  • 14
  • 31
Zar E Ahmer
  • 33,936
  • 20
  • 234
  • 300
5

If you don't destroy your activity you must set acitvity launch mode to single_instance and use moveTaskToBack(true) to send to background.

ariel
  • 253
  • 5
  • 9
1

Well, you can't move back in the current stack without finishing the activity. Perhaps you could detect onBackPressed() and then launch the home intent in a new task:

public void onBackPressed() {
    Intent i = new Intent("android.intent.action.MAIN");
        i.addCategory("android.intent.category.HOME");
        i.addCategory("android.intent.category.DEFAULT");
        i.addCategory("android.intent.category.LAUNCHER");
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(i);
    return;             
}

Let me know if that works.

Femi
  • 64,273
  • 8
  • 118
  • 148