Reputation: 53600
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.
Upvotes: 3
Views: 12708
Reputation: 156
I faced the same issue, my problem was that activity in intent has launchMode="singleInstance". changed to singleTask and code worked as it should.
Upvotes: 1
Reputation: 2546
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.
Upvotes: 3
Reputation: 2010
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
Upvotes: 20
Reputation: 3843
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);
Upvotes: 7
Reputation: 1204
maybe this works :
intent = new Intent(getApplicationContext(), MainScreen.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Upvotes: -4