14

我的问题与这类问题有点不同。我需要删除或清除我的活动堆栈,然后开始一个新活动。我认为这不是 clear_top 标志问题。我用一个例子来解释:

我的活动流程:

Login > Home > Screen1 > screen2 ....

我完成登录活动或使用 no_history 标志调用。所以我的活动看起来像这样

Login(finished)> Home [bottom of the stack now] > Screen1 > Screen2[top of the stack]

我需要处理会话错误。如果在任何时候发生任何会话错误,我需要返回登录活动。但请记住,我在堆栈中没有登录活动。所以 clear_top 不起作用。

如果 Screen2 中发生任何会话错误,那么我需要清除完整堆栈(screen2、screen1、home),然后开始登录活动。这样在登录活动中按下后退按钮后将关闭我的应用程序。

有没有办法清除活动堆栈?

提前致谢

4

4 回答 4

21

用这个

Intent i = new Intent(yourScreen.this,Home.class);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.putExtra("EXIT", true);
        startActivity(i);

并在 Home 类的 onCreate 中,执行此操作以检查,

if (getIntent().getBooleanExtra("EXIT", false)) 
    {
        Intent i = new Intent(Home.this,Login.class);
        startActivity(i);
        finish();
    }

这基本上会做的是,无论您从事什么活动,您都可以使用清晰的顶部标志调用主屏幕。在主屏幕上,onCreate 方法中有一个检查条件,这将有助于清除堆栈并带您进入登录屏幕。现在在登录屏幕上,如果您按下返回按钮,您将在堆栈被清除时退出应用程序..

让我知道问题是否仍然存在...

于 2012-09-13T09:42:47.393 回答
11

这是一个老问题,但也许其他人在寻找类似问题的答案时会偶然发现它。

您应该使用标志启动登录活动:Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK- 标志NEW_TASK的名称可能有点混乱,但如果它不存在,它实际上会创建新任务(否则将使用当前任务) - 并将CLEAR_TASK从所有以前的活动中清除它。

于 2014-02-04T13:18:35.360 回答
2

尝试这个,

完成您当前的活动

     YourCurrentActivity.this.finish();  
     Intent intent1 = new Intent(YourCurrentActivity.this,LoginActivity.class);  
     intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   
     startActivity(intent1); 

即使您的活动不在堆栈中,它也会起作用。

希望能帮助到你。

于 2012-09-13T09:49:09.137 回答
0

在这个场景中使用 onActivityResult() 来管理活动。

于 2012-09-13T09:43:08.370 回答