2011-05-11 96 views
7

朋友,如何清除上一个活动堆栈并退出后退按钮?

我有三个活动

A,B,C

A是主屏幕。

的活动,如果我使用后退按钮我想清楚了活动堆栈/以前的活动历史,主屏幕来,它应该退出应用程序推出,遵循A-> B-> C^

任何人指导我如何实现这一目标?

回答

13

很简单:上用于启动活动A.

+0

哎哟,我误解了你想清除使用后退按钮**回到A **时的历史记录。如果用户启动了应用程序,则返回主屏幕 。但是,仍然只有两种方法可以通过后退按钮或通过明确地从另一个开始活动。但是如果您在从B或C开始A活动时使用上述标志,则历史记录将被清除。如果您只是按下按钮,它也会逐个清除,所以我的答案仍然可以解决您的问题。 – compostus 2011-05-11 13:50:19

+0

因为我使用后退来到A(家庭)屏幕,那么这没有任何意义。 – UMAR 2011-05-11 13:57:41

+1

@UMAR:但是如果您只使用后退按钮来获取主页,则任何以前的活动都应该在离开时自动从历史记录中删除。不是吗? – compostus 2011-05-11 14:01:34

0

在活动的AN意图使用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);试试这个:

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){ 
       finish(); 
     } 

     return super.onKeyDown(keyCode, event); 
    } 

这将确保如果你打后退按钮的活动是finish()编辑。如果此活动位于堆栈底部finish应该退出该活动。

0

我认为堆肥是真实的,但如果不是的话,你可以用startActivityForResult()和onActivityResult()处理接收到的“消息”。 如果后退按钮被按下,活动B将发送“CLOSE_ACTIVITY”消息。在活动Ç
1组clearTaskOnLaunch =“真”在AndroidManifest,在活性的
2.声明:

2

你可以做以下

@Override 
public void onBackPressed(){ 
    moveTaskToBack(true); 
} 

,所以如果用户按下回 - 它(A)

+0

因此,如果我使用上面提到的代码,我不需要设置任何意图来清除顶级活动等。只是“moveTaskToBack”将处理所有这些? – 2013-05-27 04:20:18

+0

是的。它允许您将任务移动到背景并显示主屏幕。 (但它仍然是C活动当前活动为这个任务)。当用户再次启动应用程序时,clearTaskOnLaunch可以工作,并且除了根目录活动外,它会删除任务中的所有活动 - 所以恰恰在那时A变为活动并且C破坏。 – Arseniy 2013-05-27 15:47:32

+0

这对我不起作用,它仍然会打开一些随机页面或当我重新启动它时最后退出应用程序的页面。 – 2013-05-28 04:05:52