在开始新活动之前清除android堆栈

时间:2015-03-11 14:43:45

标签: android android-intent android-activity

我有一个包含三项活动的应用程序:登录,注册和主要活动。

我想在用户登录或注册后启动Main活动。 但是,当用户按下'后退'按钮,他不应该看到他登录的活动。换句话说,我想在开始主活动之前清除活动堆栈。

我在网上看到了一些解决方案,例如:thisthisthis。 他们没有帮助。

这是我从Login活动启动主要活动的代码:

Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
getApplicationContext().startActivity(intent);

注册活动中的代码非常相似。

我也试过把finish();在我开始活动之后,它只关闭了当前的活动。这意味着,如果我在登录活动中开始,移动到注册活动并登录到那里(登录 - >注册 - >主要),当我按下'返回'按钮我将返回登录活动。

感谢您的帮助! 尤瓦。

4 个答案:

答案 0 :(得分:1)

简单的方法是使用" noHistory"清单中的属性。您可以在清单文件中为登录活动设置它

<activity
    android:noHistory="true"
/>

答案 1 :(得分:0)

你可以这样做:

如果用户进入注册屏幕,则只需完成登录活动,当他们点击设备上的后退按钮时,您可以调用onBackPressed()方法。在那里,您可以完成注册屏幕并开始登录活动。如果用户进入注册屏幕然后注册,您还需要完成注册活动并打开主菜单或其他内容。

登录:

点击注册?开始注册活动并完成登录

startActivity (new Intent (Login.this, Register.class));
finish ();

寄存器:

点击提交?开始主要活动并完成注册活动

startActivity (new Intent (Register.this, Main.class));
finish ();

点击后退按钮?

@Override
public void onBackPressed (){
startActivity (new Intent (Register.this, Login.class));
finish ();

}

你也可以在androidmanifest中使用:

android:noHistory="true"

在您希望没有历史记录的活动中(如果用户点击后退按钮,则无法访问)。 但我更喜欢在代码中做到这一点!

希望这能帮到你!

答案 2 :(得分:0)

试试这个:

Intent intent = new Intent(this, SomeOtherClass.class);

// do not keep this intent in history
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);

答案 3 :(得分:0)

你所做的几乎是正确的,只需对意图做一点改动。

取代使用,

    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    getApplicationContext().startActivity(intent);

使用:

    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    getApplicationContext().startActivity(intent);

它将清除顶部,启动新任务并清除所有上一个任务。现在,Android知道的是,堆栈中存在MainActivity。你可以写:

    @Override
    public void onBackPressed() {
         finish();
    }
MainActivity中的

允许用户退出应用程序而不返回LoginActivity。