在开始新的 activity 之前清除 android 堆栈
Clearing android stack before starting a new activity
我有一个包含三个活动的应用程序:登录、注册和主要 activity。
我想在用户登录或注册后启动 Main activity。
但是,当用户按下 'back' 按钮时,他不应该看到他登录的 activity。换句话说,我想在启动 Main activity.
在网上看到了几个解决方法,例如:this, this and this。
他们没有帮助。
这是我用于从登录 activity 启动主要 activity 的代码:
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
getApplicationContext().startActivity(intent);
寄存器activity中的代码非常相似。
我也试过把finish();在我启动 activity 之后,它只关闭了当前的 activity。意思是,如果我从登录 activity 开始,移动到寄存器 activity 并在那里登录(登录 -> 注册 -> Main),当我按下 'back' 按钮时,我会return 登录 activity.
感谢您的帮助!
尤瓦尔.
最简单的方法是在清单中使用 "noHistory" 属性。您可以在清单文件
中为登录名 activity 设置它
<activity
android:noHistory="true"
/>
你可以这样做:
如果用户转到注册屏幕,则只需完成登录 activity,当他们单击设备上的后退按钮时,您可以调用 onBackPressed () 方法。在那里您可以完成注册屏幕并开始登录 activity。如果用户转到注册屏幕然后注册,您还想完成注册activity并打开主菜单或其他内容。
登录:
点击注册?开始注册activity,完成登录
startActivity (new Intent (Login.this, Register.class));
finish ();
注册:
点击提交?启动 main activity 并完成 register activity
startActivity (new Intent (Register.this, Main.class));
finish ();
点击返回按钮?
@Override
public void onBackPressed (){
startActivity (new Intent (Register.this, Login.class));
finish ();
}
你也可以在androidmanifest中使用:
android:noHistory="true"
在您希望没有历史记录的活动中(如果用户单击后退按钮,则用户无法前往)。
但我更喜欢用代码来做!
希望对您有所帮助!
试试这个:
Intent intent = new Intent(this, SomeOtherClass.class);
// do not keep this intent in history
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
你所做的几乎是正确的,只需对 Intent 做一个小改动。
代替使用,
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。
我有一个包含三个活动的应用程序:登录、注册和主要 activity。
我想在用户登录或注册后启动 Main activity。 但是,当用户按下 'back' 按钮时,他不应该看到他登录的 activity。换句话说,我想在启动 Main activity.
在网上看到了几个解决方法,例如:this, this and this。 他们没有帮助。
这是我用于从登录 activity 启动主要 activity 的代码:
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
getApplicationContext().startActivity(intent);
寄存器activity中的代码非常相似。
我也试过把finish();在我启动 activity 之后,它只关闭了当前的 activity。意思是,如果我从登录 activity 开始,移动到寄存器 activity 并在那里登录(登录 -> 注册 -> Main),当我按下 'back' 按钮时,我会return 登录 activity.
感谢您的帮助! 尤瓦尔.
最简单的方法是在清单中使用 "noHistory" 属性。您可以在清单文件
中为登录名 activity 设置它<activity
android:noHistory="true"
/>
你可以这样做:
如果用户转到注册屏幕,则只需完成登录 activity,当他们单击设备上的后退按钮时,您可以调用 onBackPressed () 方法。在那里您可以完成注册屏幕并开始登录 activity。如果用户转到注册屏幕然后注册,您还想完成注册activity并打开主菜单或其他内容。
登录:
点击注册?开始注册activity,完成登录
startActivity (new Intent (Login.this, Register.class));
finish ();
注册:
点击提交?启动 main activity 并完成 register activity
startActivity (new Intent (Register.this, Main.class));
finish ();
点击返回按钮?
@Override
public void onBackPressed (){
startActivity (new Intent (Register.this, Login.class));
finish ();
}
你也可以在androidmanifest中使用:
android:noHistory="true"
在您希望没有历史记录的活动中(如果用户单击后退按钮,则用户无法前往)。 但我更喜欢用代码来做!
希望对您有所帮助!
试试这个:
Intent intent = new Intent(this, SomeOtherClass.class);
// do not keep this intent in history
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
你所做的几乎是正确的,只需对 Intent 做一个小改动。
代替使用,
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。