2012-03-30 64 views
0

我有我的活动如下设置:结算活动堆栈不工作

A(noHistory) - “乙 - ”ç - > d - >电子

所以,当我开始activity Eactivity D我希望E成为根活动并清除后面堆栈的其余部分。

我也跟着在这里很多帖子中提到的解决方案,它是下列标志添加到我的意图:

final Intent explicitIntent = new Intent(this, 
       E.class); 
     explicitIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     explicitIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     this.startActivity(explicitIntent); 

然而,Activity E(这是以前没有运行)不会成为回堆栈的根。相反,只有Activity D从后退堆栈中删除,如果我按下后退按钮,CB仍然存在。

因此,我想在SDK < 11中实现真正不可能的功能,如下所述:Clear the entire history stack and start a new activity on Android?这些线

explicitIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
explicitIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

+0

你想从E回到A吗? – Rasel 2012-03-30 09:12:41

+0

检查下面的链接,一个类似的问题。它可能会帮助你。 [如何清除Android Stack的活动?](http://stackoverflow.com/questions/4190429/how-to-clear-the-android-stack-of-activities) – 2012-03-30 09:18:33

+0

@Rasel不,我想当我从E – 2012-03-30 09:59:39

回答

0

最后我只是做了作为RASEL建议(在评论我的问题) 当在活动B,C,D上输入活动E i完成时,将它们从堆栈中取出。

0

在你的代码只需更换以下行

explicitIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

试试这个代码。

+0

也没有工作(我猜是因为活动E尚未运行) – 2012-03-30 10:13:43

1

启动活动,这样的..

这活动B

int k=1; 
     Intent i=new Intent(B.this,C.class); 
     startActivityForResult(i,k); 

这活动Ç

int j=1; 
     Intent i=new Intent(C.this,D.class); 
     startActivity(i,j); 

这活动d

int j=1; 
     Intent i=new Intent(D.this,E.class); 
     startActivityForResult(i,j); 
     setResult(RESULT_OK, null); 
     finish(); 

并把这个活动Ç

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode ==1) { 
     if (resultCode == RESULT_OK) { 

     setResult(RESULT_OK, null); 
    finish(); 

     } 
    } 

这活动B

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode ==1) { 
     if (resultCode == RESULT_OK) { 

     setResult(RESULT_OK, null); 
    finish(); 

     } 
    } 
+0

你试过这个...这一个工程.. – 5hssba 2012-03-30 10:58:40