Android, Intent.FLAG_ACTIVITY_CLEAR_TOP seems doesn't work?
Solution 1
Try using this intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
inplace of intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent intent = new Intent(getApplicationContext(),
yourActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Solution 2
I have tried Intent.FLAG_ACTIVITY_CLEAR_TOP But haven't got proper solution so finally this helps me
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);
This clears all the stack and run only LoginActivity
Solution 3
Read it once and you will never have the problem in the usage of flag_activity_clear_top
Here is a simple clarification regarding the usage of Flag_Activity_Clear_Top.
One Liner Formula for its right use :
It always clears the intermediate Activities ( if any ) between the calling activity and the called activity.
Here is an Activity Flow :
Activity A -> Activity B -> Activity C ( use flag activity clear top to go to D) ->Activity D
In the above sequence when reaching to D if we press back then we will get Activity C->Activity B-> Activity A , as there is no INTERMEDIATE ACTIVITY between Activity C and Activity D
Myth of some developers here is -
After reaching the activity D by using flag activity clear top from C, they were expecting that on the press of back key from D will take them to outside the application., which will never happen.
Flag_Activity_Clear_Top always always clears the INTERMEDIATE ACTIVITIES BETWEEN THE TWO ACTIVITIES IF ANY
Solution 4
If you want to start an Activity to be the only one existing (that is, clear the whole backstack), use the following flags:
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
Requires API-Level >= 11.
Solution 5
I faced the same issue, my problem was that activity in intent has launchMode="singleInstance". changed to singleTask and code worked as it should.
![Hesam](https://i.stack.imgur.com/ur7p5.jpg?s=256&g=1)
Comments
-
Hesam about 2 years
In my menu I have some items. Home is an item of it that I want to be root of my application and whenever user clicks on it, Android clear stack and then come back to main screen.
This is my code:
menu.setOnItemClickedListener(new MenuClickedListener() { public void eventOccured(int id) { Intent intent = null; switch(id) { case 1: intent = new Intent(context, More.class); break; case 2: intent = new Intent(context, FavoriteScreen.class); break; case 3: intent = new Intent(context, VideoShowList.class); break; case 4: intent = new Intent(context, ShoppingList.class); break; case 5: intent = new Intent(context, MainScreen.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); break; } if(intent != null) context.startActivity(intent); } });
Menu works fine but it seems flag doesn't work because from Home screen, i go to second and third screen then i click on Home item of menu and come back to home screen. Now, when i click on back button, i go to third screen, second screen and Home screen.
I have designed this menu as widget in order to setup it one time and reuse it on all of my screens.
Any suggestions would be appreciated. Thanks.
-
Admin almost 12 yearsI thought the same, the reason 'm confused is that if no flag added yet then we use addFlag() else setFlag() what a fish!!!
-
Jaroslav over 9 yearsGood explanation. Would be even better if you would include the solution for what everybody wants - make activity the only one left in the back stack.
-
Sharp Edge over 7 yearsperfect answer +1
-
Michael Katkov almost 7 yearsGreat solution!
-
Дмитро Яковлєв about 6 yearsThis does not helps