Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ActionBar up navigation recreates parent activity instead of onResume

I'm using the recommended approach for Up Navigation and my code looks like this:

@Override public boolean onOptionsItemSelected(MenuItem item) {     switch (item.getItemId()) {         case android.R.id.home:             Intent h = new Intent(ShowDetailsActivity.this, MainActivity.class);             h.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);             startActivity(h);             return true;         default: return super.onOptionsItemSelected(item);     } } 

Here's the use-case:

  1. I launch my app which is "MainActivity"
  2. I click a button to go to "ShowDetailsActivity"
  3. I click on the UP ActionBar navigation

The issue is after I click on UP, MainActivity hits its onCreate() methods all over again and loses all state instead of starting at the typical onResume() like it would if I just called "finish()" from ShowDetailsActivity. Why? Is this how it always works and this is expected behavior for Android to recreate all activities that are navigated to using the "Up" navigation approach? If I hit the back button I get the expected onResume lifecycle.

This is my solution if an Android "proper" ones doesn't exist:

@Override public boolean onOptionsItemSelected(MenuItem item) {     switch (item.getItemId()) {         case android.R.id.home:             Intent upIntent = new Intent(this, MainActivity.class);             if (NavUtils.shouldUpRecreateTask(this, upIntent)) {                 NavUtils.navigateUpTo(this, upIntent);                 finish();             } else {                 finish();             }             return true;         default: return super.onOptionsItemSelected(item);     } } 
like image 906
user123321 Avatar asked Mar 21 '13 23:03

user123321


People also ask

Where do you define each child activity and parent activity to provide up navigation?

Declare a Parent Activity To support the up functionality in an activity, you need to declare the activity's parent. You can do this in the app manifest, by setting an android:parentActivityName attribute. The android:parentActivityName attribute was introduced in Android 4.1 (API level 16).

Can we create activity without UI in Android?

Explanation. Generally, every activity is having its UI(Layout). But if a developer wants to create an activity without UI, he can do it.

What does finish () do in Android?

On Clicking the back button from the New Activity, the finish() method is called and the activity destroys and returns to the home screen.


1 Answers

Add the following to your parent activity in the manifest file

android:launchMode="singleTop" 

regarding to this answer

like image 170
carmen Avatar answered Oct 09 '22 09:10

carmen