0

我有一个包含两个活动的应用程序:“主要”活动(M)和“设置”活动(S)。S 只能从 M 启动。S 的目的是修改影响 M 的设置。S 有一个“完成”按钮,用于完成活动并返回到 M(通过 M 的onActivityResult方法,其中Intent包含 M 的新设置申请)。

我的问题是:如果我使用硬件“返回”按钮(而不是 S 的“完成”按钮)从 S 回到 M,系统会将 M 带到顶部,而无需了解修改后的设置。可以修改此行为吗?理想情况下,我想在 S 位于顶部时更改硬件“后退”按钮的行为,以便它导致 S 完成(这样 M 将获得新设置)。

如果这是不可能的,更一般地说:你会怎么做才能在按下“后退”按钮时应用这些设置?

4

5 回答 5

4

您可以简单地覆盖onBackPressed()

@Override
public void onBackPressed()
{
    // check if settings have been changed
    super.onBackPressed();
}

由于这是一个“结束动作”,super请在您完成其他工作后进行通话。

跟进黑带答案(现已删除的评论)上留下的评论,如果您还没有考虑,请询问用户是否确定要退出而不保存,以防他们进入设置并决定不更改任何事物。如果他们因为决定不保存更改而按下后退按钮怎么办?您可能已经为此设置了一些东西,例如取消按钮。

于 2013-07-23T14:49:36.453 回答
2

您必须覆盖onBackPressedfrom并从按钮Activity管理相同的逻辑done

于 2013-07-23T14:49:22.223 回答
2

您还可以在您的包中引入一个新的 java 类,其中包含保存您的设置的静态字段。

在用户更改设置时写入它们,并在 Activity 的OnResume()方法中或稍后根据需要从它们中读取。

于 2013-07-23T15:21:31.457 回答
1

您可以通过覆盖 onbackpressed 方法来实现您想要的

@Override
public void onBackPressed() {
    Intent intent = new Intent();

    //get your settings from your views
    intent.putExtra("setting1","on");
    intent.putExtra("setting2","off");

    setResult(RESULT_OK);
    finish();
}
于 2013-07-23T14:56:40.893 回答
1

上面的答案会做你想要的,但是:

您是否考虑过使用内置的 android SharedPreferences?这样,对设置的更改(在 S 中进行)将存储到设备中,然后您可以告诉活动 M 查看设置并在 onResume 方法中进行适当的更新。此外,设置将永远保存,无论 S 发生什么都没关系。

于 2013-07-23T14:57:45.207 回答