36
votes

Activity A ===click button===> Activity B

When press back button, Activity A is not recreated.

When press home as up button, Activity A is recreated.

So I save state when A.onSaveInstanceState(Bundle outState) , and use state when A.onRestoreInstanceState(Bundle savedInstanceState).

Saving and Using works fine (except home as up button)

.

However,

When pressed home as up button, system recreate Activity A, and savedInstanceState is gone.

How can I use Saved Instance State?

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
        // I do not want this... 
        // Home as up button is to navigate to Home-Activity not previous acitivity
            super.onBackPressed();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
2
@ArunCThomas "Home as up button is to navigate to Home-Activity not previous acitivity" If other pakage app start Activity B and user press up button, must show Activity A (Because A is home of B).ChangUZ

2 Answers

58
votes

In the onCreate() enable the home button.

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
}

In the onOptionItemSelected() method do this.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

This should enable Up navigation. If you want the parent activity to be restored with a savedInstanceState. You should set launchMode="singleTop" in the parent activity in Manifest file.

For more info check out http://developer.android.com/: Providing Up Navigation

32
votes
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

I used finish() insteed of NavUtils;