在选项菜单中启动活动后,请回退按钮

时间:2014-01-13 11:53:37

标签: android back-button

我有两项活动:MainActivitySettingActivity

最初,该应用程序已启动至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函数中,它将通过以下方式返回MainActivity

Intent mainActivity = new Intent(SettingActivity.this, MainActivity.class);
startActivity(mainActivity);

第一个问题,这个流程是否正确?

接下来,在我转到SettingActivity并点击“保存”按钮返回MainActivity期间,当我按“返回”按钮时,它会返回SettingActivity。我希望Back按钮将返回以关闭应用程序(无需杀死应用程序),而不是返回设置。所以,我的第二个问题,我怎样才能创建我预期的行为?

备注:对于Android而言,在使用UINavigationController的iOS概念中,它会在UINavigationBar上的“后退”按钮后返回到上一个回传。

6 个答案:

答案 0 :(得分:2)

只需从finish();而不是

致电SettingActivity

Intent mainActivity = new Intent(SettingActivity.this, MainActivity.class); startActivity(mainActivity);

答案 1 :(得分:1)

您只是从设置活动中再次启动主要活动。这就是将activityactivity设置为活动堆栈中的上一个活动的原因。有几种方法可以实现您的目标。但是当我完成工作时,我会选择完成设置活动。所以你会自动转到主要活动。

答案 2 :(得分:1)

不是使用MainActivity来电重新启动startActivity(),而是在保存各种更改后,应该在保存方法中finish()上调用SettingsActivity

默认行为会将您带回到最后一个正在运行的活动,在这种情况下,您的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();
}

答案 3 :(得分:1)

然后,有一个Save按钮是SettingActivity。在onClick函数中,它将通过以下方式返回到MainActivity:

Intent mainActivity = new Intent(SettingActivity.this, MainActivity.class);
startActivity(mainActivity);"

请替换此

Intent mainActivity = new Intent(SettingActivity.this, MainActivity.class);
startActivity(mainActivity);

通过

finish();

答案 4 :(得分:1)

转到SettingsActivity时,您的后台堆栈是:

MainActivity
SettingsActivity

因此,当您按下SAVE并为MainActivity创建另一个意图时,您的SettingsActivity会转到后台,这就是为什么当您按BACK时,它会返回到Settings,因为SettingsActivity已恢复。这是一种正常的Android行为。

您要做的是完成SettingsActivity,因此当您在“设置”中按下“保存”按钮时,只需通过调用以下内容返回上一个(MainActivity):

finish();

而不是对MainActivity的意图。

阅读文档herehere

答案 5 :(得分:0)

您可以使用ActivityGroup活动来控制您的活动。无论何时膨胀活动,都将活动推送到堆栈,无论何时按下,都会从堆栈中弹出活动。