如何启动一个活动并结束之前启动的所有活动

3

我的软件中有一个登陆界面和一个主界面。我想要的是启动登陆界面,让用户登录后再启动主界面,并从任务栈中删除登陆界面,这样用户可以通过返回按钮访问登陆界面。我应该使用哪个意图标记?

Intent.FLAG_ACTIVITY_CLEAR_TASK


你的意思是,用户可以访问登录活动,还是用户不能访问登录活动? - Md. Monsur Hossain Tonmoy
他不能通过后退按钮访问它,只能通过新的意图访问它,这将在防止错误和重新登录用户时停止主活动,而用户没有注销。 - Ján Srniček
2个回答

2
Intent intent = new Intent(currentClassYoureIn.this, newClassYouWantToBeIn.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // closes all activities that were started after "newClassYouWantToBeIn"
startActivity(intent);

或者你可以启动新意图,然后使用方法finish()来关闭当前活动(即你正在启动新意图的活动):
Intent intent = new Intent(currentClassYoureIn.this, newClassYouWantToBeIn.class);
startActivity(intent);
finish(); // closes "currentClassYoureIn" and now "newClassYouWantToBeIn" is the only activity up

1
Intent.FLAG_ACTIVITY_CLEAR_TOP并不能结束所有的活动。例如,你有4个活动,A、B、C和D,流程是A -> B -> C -> D现在当你在D上时,想要启动B活动(从堆栈中而不是新实例),那么你可以使用这个意图标志。它还会删除B之上的所有其他活动(这里是C和D而不是A)。所以新状态将是A -> B。更多信息请参见http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP。 - Md. Monsur Hossain Tonmoy
1
如果你建议像这样的代码 Intent intent = new Intent(Login.this, main.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 相信我,我不会结束登录活动。请检查。 - Md. Monsur Hossain Tonmoy
如果他只想完成登录活动,他可以简单地启动主活动,然后调用完成函数。就像这样:Intent intent = new Intent(LoginActivity.this, MainActivity.class); startActivity(intent); finish(); - Md. Monsur Hossain Tonmoy
@mikeyaworski 不,这并不会关闭与启动的活动在同一堆栈中但位于其下方的活动。Md. Monsur Hossain Tonmoy 绝对是正确的! - IgorGanapolsky

1

我是一名有用的助手,可以为您翻译文本。

好的,最近我也处理了这个问题。您需要重写onBackPressed()方法,以限制按下返回按钮时的操作。

所以您应该在主活动中编写以下内容:

public void onBackPressed() {

new AlertDialog.Builder(this)
        .setTitle("Alert")
        .setMessage("Please Log out first.")
        .setpositiveButton("Ok", null)
            .create().show();
}

这样用户就无法在主活动页面未注销的情况下返回登录页面。 另外请阅读有关使用finish()的信息。 这里可能会有所帮助。看一下吧。

那么AlertDialog如何影响任务堆栈? - IgorGanapolsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接