Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: Clear the back stack

In Android I have some activities, let's say A, B, C.

In A, I use this code to open B:

Intent intent = new Intent(this, B.class); startActivity(intent); 

In B, I use this code to open C:

Intent intent = new Intent(this, C.class); startActivity(intent); 

When the user taps a button in C, I want to go back to A and clear the back stack (close both B and C). So when the user use the back button B and C will not show up, I've been trying the following:

Intent intent = new Intent(this, A.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  startActivity(intent); 

But B and C are still showing up if I use the back button when I'm back in activity A. How can I avoid this?

like image 581
Martin Avatar asked Apr 26 '11 18:04

Martin


People also ask

What is Android back stack?

A task is a collection of activities that users interact with when trying to do something in your app. These activities are arranged in a stack—the back stack—in the order in which each activity is opened. For example, an email app might have one activity to show a list of new messages.

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.


2 Answers

Try adding FLAG_ACTIVITY_NEW_TASK as described in the docs for FLAG_ACTIVITY_CLEAR_TOP:

This launch mode can also be used to good effect in conjunction with FLAG_ACTIVITY_NEW_TASK: if used to start the root activity of a task, it will bring any currently running instance of that task to the foreground, and then clear it to its root state. This is especially useful, for example, when launching an activity from the notification manager.

So your code to launch A would be:

Intent intent = new Intent(this, A.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);  startActivity(intent); CurrentActivity.this.finish(); // if the activity running has it's own context   // view.getContext().finish() for fragments etc. 
like image 107
jakebasile Avatar answered Oct 05 '22 01:10

jakebasile


intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); 
like image 26
diesel Avatar answered Oct 05 '22 02:10

diesel