Android remove Activity from back stack

AndroidStack

Android Problem Overview


Okay so I'm kind of stumped on what to do with this. So I have the MainActivity, and from there an Activity can be launched to DegreePlanActivity, and from there another Activity can be launched to EditDegreePlan. I've got EditDegreePlan set to noHistory in the AndroidManifest. The problem is after they save the EditDegreePlan it launches an Activity to DegreePlan. So if the user presses Back they have to press it twice to get to MainActivity again. I want to get rid of that so they only have to press it once. I'm stumped on how to do this though.

If I set DegreePlanActivity to noHistory then they couldn't press Back to it while in EditDegreePlan.

I've tried overriding onBackPressed method and launching an intent to MainActivity. The problem then is that they have to press Back multiple times to exit the app then.

What should I do?

Android Solutions


Solution 1 - Android

FLAG_ACTIVITY_CLEAR_TOP clears your Activity stack , you can use the code below:

Intent intent = new Intent(this, Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

Remember that this flag clears just Intermediate Activities , for example if you have A,B,C in your Back Stack then going from C Activity to D with this flag this does not clear Back Stack and the Stack would be A,B,C,D but if you go from Activity D to Activity A with this flag , B,C,D Activities will pop up from the stack and you will have just A in the Back Stack .

Solution 2 - Android

simple solution for API >= 15 to API 23 user activity name in intent.

 Intent nextScreen = new Intent(currentActivity.this, MainActivity.class);
 nextScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
 startActivity(nextScreen);
 ActivityCompat.finishAffinity(currentActivity.this);

Solution 3 - Android

I would suggest that you use startActivityForResult(), instead of simply startActivity(), when you launch the EditDegreePlan-Activity, as described in the Android tutorials.

In the EditDegreePlan-Activity you then call

setResult(RESULT_OK);
finish();

If you don't expect any data from the EditDegreePlan-Activity, then you don't necessarily have to implement the onActivityResult.

Solution 4 - Android

To remove activity from back stack inside manifest add android:noHistory="true" to your activity inside the manifest file.

See sample below.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.activity"
      android:versionCode="1"
      android:versionName="1.0">
 <application android:name="MyApp" android:label="My Application">
    <activity android:name=".LoginActivity" 
      android:noHistory="true"> //add this line to your activity inside manifest
     <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
   </activity>
 </application>
</manifest>

Solution 5 - Android

It seems, that you will get the desired behavior if you do not specify any flags at all. The back button would just do the right thing. To get an activity closed from within your code use the finish() method it has the same effect as the user pressing the back button. So you will automatically arrive at DegreePlan when you finish the EditDegreePlan, no need to call any Intents either.

Solution 6 - Android

You can call finish before you start your new activity. This will remove the current activity from the stack, so when you press back button from the next activity, the first activity will not be called from the stack history.

Intent i = new Intent(MainActivity.this, NextActivity.class);
finish();  
startActivity(i);

Solution 7 - Android

Here is your flow:

MainActivity --> DegreePlanActivty --> EditDegreePlan--> DegreePlan --> MainActivty

Override these method inside your "DegreePlan"

public void onBackPressed() {
   super.onBackPressed();
   Intent goToMainActivity = new Intent(getApplicationContext(), MainActivity.class);
   goToMainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Will clear out your activity history stack till now
   startActivity(goToMainActivity);
}

Solution 8 - Android

use this to clear the stack :

 menuIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);

Solution 9 - Android

Intent intent = new Intent(getContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 

startActivity(intent);
                            

Solution 10 - Android

You can add flags as follows and start Activity, try below code

Intent i = new Intent(activity, Payment.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
activity.startActivity(i);

Solution 11 - Android

This code should help you out: It is in Kotlin
private fun verifyIfUserIsLoggedIn(){
        val uid = FirebaseAuth.getInstance().uid
        if(uid== null){
            val intent = Intent(this, MainActivity::class.java)
            intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
            startActivity(intent)
        }
    }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEmrys90View Question on Stackoverflow
Solution 1 - AndroidArash GMView Answer on Stackoverflow
Solution 2 - AndroidKamal BunkarView Answer on Stackoverflow
Solution 3 - AndroidSoanaView Answer on Stackoverflow
Solution 4 - AndroidIsaac SekamatteView Answer on Stackoverflow
Solution 5 - AndroidHenryView Answer on Stackoverflow
Solution 6 - Androidlive-loveView Answer on Stackoverflow
Solution 7 - AndroidVikalp PatelView Answer on Stackoverflow
Solution 8 - AndroidHeena AroraView Answer on Stackoverflow
Solution 9 - AndroidLuis MuñozView Answer on Stackoverflow
Solution 10 - AndroidRachit MishraView Answer on Stackoverflow
Solution 11 - AndroidEmmanuel AmetepeeView Answer on Stackoverflow