Intent.FLAG_ACTIVITY_SINGLE_TOP的行为Intent.FLAG_ACTIVITY_CLEAR_TOP

时间:2014-08-25 16:55:45

标签: android android-intent android-activity tabs start-activity

我使用以下代码调出SignInActivity,同时清除所有其他代码:

Intent intent = new Intent(activity, SignInActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
activity.startActivity(intent);

我的应用有多个标签,而SignInActivity是标签活动之一:

TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);
tabHost.setup(getLocalActivityManager());
tabHost.addTab(tabHost.newTabSpec("home").setIndicator(createTabView(this, "Home", R.drawable.home)).setContent(new Intent(MainActivity.this, HomeActivity.class)));
tabHost.addTab(tabHost.newTabSpec("lists").setIndicator(createTabView(this, "My List", R.drawable.shopping_list)).setContent(new Intent(MainActivity.this, ShoppingListActivity.class)));
tabHost.addTab(tabHost.newTabSpec("stores").setIndicator(createTabView(this, "Stores", R.drawable.store_finder)).setContent(new Intent(MainActivity.this, StoreActivity.class)));
tabHost.addTab(tabHost.newTabSpec("my_card").setIndicator(createTabView(this, "My card", R.drawable.more_card)).setContent(new Intent(MainActivity.this, SignInActivity.class)));
tabHost.addTab(tabHost.newTabSpec("more").setIndicator(createTabView(this, "More", R.drawable.more)).setContent(new Intent(MainActivity.this, MoreActivity.class)));

在执行时,运行了TransactionActivity,并且从事务活动中调用了代码(上面显示的第一个代码块)。我希望清除事务活动,并将原始的SignInActivity置于顶端。但我实际观察到的是,一个新的SignInActivity已经开始,而不仅仅是让原始的一个;当我点击后退按钮时,交易活动显示出来,表明它没有被清除;当我再次点回时,原来的SignInActivity显示出来。

1 个答案:

答案 0 :(得分:0)

要清除已启动活动的整个历史记录,然后从新鲜活动开始活动,请使用以下代码:

            Intent i = new Intent(getActivity(), LoginActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(i);

我个人在用户退出应用程序时使用它,然后清除所有需要登录的活动的历史记录并再次显示登录活动。