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。