Hesam
Hesam

Reputation: 53600

Android, Intent.FLAG_ACTIVITY_CLEAR_TOP seems doesn't work?

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

Answers (5)

Алексей Юр
Алексей Юр

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

Salim
Salim

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

Bhavin Chauhan
Bhavin Chauhan

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

Rahul Patel
Rahul Patel

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

Habib Zare
Habib Zare

Reputation: 1204

maybe this works :

intent = new Intent(getApplicationContext(), MainScreen.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Upvotes: -4

Related Questions