我有一个包含三项活动的应用程序:登录,注册和主要活动。
我想在用户登录或注册后启动Main活动。 但是,当用户按下'后退'按钮,他不应该看到他登录的活动。换句话说,我想在开始主活动之前清除活动堆栈。
我在网上看到了一些解决方案,例如:this,this和this。 他们没有帮助。
这是我从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();在我开始活动之后,它只关闭了当前的活动。这意味着,如果我在登录活动中开始,移动到注册活动并登录到那里(登录 - >注册 - >主要),当我按下'返回'按钮我将返回登录活动。
感谢您的帮助! 尤瓦。
答案 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。