Android 在选项菜单中启动活动后的返回按钮
我有两个活动:Android 在选项菜单中启动活动后的返回按钮,android,back-button,Android,Back Button,我有两个活动:main活动和SettingActivity 最初,该应用程序将启动到MainActivity。我通过以下方式启动菜单: @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.action_settings: Intent settingActivity = new Intent(Main
main活动
和SettingActivity
最初,该应用程序将启动到MainActivity
。我通过以下方式启动菜单:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.action_settings:
Intent settingActivity = new Intent(MainActivity.this, SettingActivity.class);
startActivity(settingActivity);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
然后,有一个保存按钮是
SettingActivity
。在onClick
功能中,它将通过以下方式返回到main活动
:
Intent mainActivity = new Intent(SettingActivity.this, MainActivity.class);
startActivity(mainActivity);
第一个问题,这个流程正确吗
接下来,在我转到SettingActivity
并单击Save按钮返回到MainActivity
期间,当我按下back按钮时,它返回到SettingActivity
。我希望返回按钮将返回关闭应用程序(无需关闭应用程序),而不是返回到设置。那么,我的第二个问题,我如何才能创造我预期的行为
旁注:Android非常新,在iOS使用
UINavigationController
的概念中,当UINavigationBar
上的后退按钮刚刚从设置活动重新启动主活动时,它将返回到上一个后退。这就是为什么settingactivity被设置为活动堆栈中的上一个活动。有几个选项可以实现你想要的。但我会选择在工作完成后完成设置活动。因此,您将自动转到主活动 您刚刚从设置活动重新开始主活动。这就是为什么settingactivity被设置为活动堆栈中的上一个活动。有几个选项可以实现你想要的。但我会选择在工作完成后完成设置活动。因此,您将自动转到主活动 保存各种更改后,您应该在保存方法中调用设置活动上的finish()
,而不是使用startActivity()
调用来重新启动main活动
默认行为会将您带回上次运行的活动,在这种情况下,您的MainActivity
一个更完整的例子
// MainActivity
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.action_settings:
Intent settingActivity = new Intent(MainActivity.this, SettingActivity.class);
startActivity(settingActivity);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected void onResume() {
// This will be called after you finish SettingsActivity.
}
// SettingsActivity
private void save() {
// Save your current options
finish();
}
保存各种更改后,您应该在保存方法中的SettingsActivity
上调用finish()
,而不是使用startActivity()
调用重新启动main活动
默认行为会将您带回上次运行的活动,在这种情况下,您的MainActivity
一个更完整的例子
// MainActivity
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.action_settings:
Intent settingActivity = new Intent(MainActivity.this, SettingActivity.class);
startActivity(settingActivity);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected void onResume() {
// This will be called after you finish SettingsActivity.
}
// SettingsActivity
private void save() {
// Save your current options
finish();
}
只需调用finish()代码>来自设置活动
而不是
Intent mainActivity=新的Intent(设置activity.this、mainActivity.class);
星触觉(主要活动)代码>只需调用finish()代码>来自设置活动
而不是
Intent mainActivity=新的Intent(设置activity.this、mainActivity.class);
星触觉(主要活动)代码>然后,有一个保存按钮正在设置活动。在onClick函数中,它将通过以下方式返回到MainActivity:
Intent mainActivity = new Intent(SettingActivity.this, MainActivity.class);
startActivity(mainActivity);"
请更换这个
Intent mainActivity = new Intent(SettingActivity.this, MainActivity.class);
startActivity(mainActivity);
借
然后,有一个保存按钮正在设置活动。在onClick函数中,它将通过以下方式返回到MainActivity:
Intent mainActivity = new Intent(SettingActivity.this, MainActivity.class);
startActivity(mainActivity);"
请更换这个
Intent mainActivity = new Intent(SettingActivity.this, MainActivity.class);
startActivity(mainActivity);
借
进入设置活动时的后堆栈是:
MainActivity
SettingsActivity
因此,当您按SAVE并创建另一个MainActivity意图时,您的设置活动会转到后台,这就是为什么当您按BACK时,它会回到设置,因为设置活动会恢复。这是Android的正常行为
您要做的是完成设置活动,因此当您在“设置”中按“保存”按钮时,只需通过调用返回到上一个(Main活动):
finish();
而不是意图维持活动
阅读文档和。当转到设置时,您的后堆栈活动是:
MainActivity
SettingsActivity
因此,当您按SAVE并创建另一个MainActivity意图时,您的设置活动会转到后台,这就是为什么当您按BACK时,它会回到设置,因为设置活动会恢复。这是Android的正常行为
您要做的是完成设置活动,因此当您在“设置”中按“保存”按钮时,只需通过调用返回到上一个(Main活动):
finish();
而不是意图维持活动
阅读文档和。您可以使用ActivityGroup活动来控制您的活动。每当您为活动充气时,您都会将该活动推到堆栈中,每当您按back键时,您都会从堆栈中弹出该活动。您可以使用ActivityGroup活动来控制您的活动。每当为活动充气时,将活动推到堆栈中,每当按back键时,将活动从堆栈中弹出。您必须在调用MainActivity之前完成设置activity。您必须在调用MainActivity之前完成设置activity。