1

我正在创建一个向导式应用程序,我需要在其中保持活动 A 和 B 之间的用户数据处于活动状态。A 有一个 Next 软按钮,B 有一个 Back 软按钮。

使用时,FLAG_ACTIVITY_REORDER_TO_FRONT我可以在使用软按钮时保持用户数据活跃,因为每个活动都被重用。

但是,当用户从 B 按下 Back 硬按钮时,B 会死掉,因为该硬按钮隐式使用了 finish()。

然后,我尝试在 B 中覆盖onBackPressed,添加与我的后退软按钮相同的行为,认为后退硬按钮的行为与前一个按钮完全相同(不是完成 B)。

现在,使用 Back 硬键从 B 回到 A,一切都很好。此时焦点在A,当用户再次按下返回硬按钮时,预期的行为是应用程序离开。

问题是没有发生预期的行为,因为 B 还活着;所以onBackPressed在 B 中被覆盖的仍然在听,而是发生了一些其他的行为。

如何onBackPressed在 B 中使用覆盖完成收听,以便当焦点在 A 中时应用程序离开?

提前致谢。

4

2 回答 2

0

考虑按照 Krylez 的评论行事。或者您可能想使用片段。如果您的目标是早于 3.x 的 SDK,请参阅支持库

SDK 文件夹内有示例项目,使用向导样式。

于 2012-07-28T11:16:12.050 回答
0

好吧,我可以用一个自然的 Android 解决方案来解决我的问题:

按照 Krylez 的提示,我已经停止使用 FLAG_ACTIVITY_REORDER_TO_FRONT,所以我不再与硬按钮发生冲突,现在我正在回收启动我的向导的 Intent。

在 A 中,我有一个非常常用的方法,当用户按下继续软按钮转到 B 时会调用该方法。活动 A 只是提供信息,因此在转到 B 时不需要将 Intent 的附加信息与用户的数据一起放入,例如这:

    /** Called when the user presses the Continue button*/
public void continueButtonOnClick(View view) {

        Intent intent = this.getIntent();
        intent.setClass(this, StepOneRegisterWizardActivity.class);
        startActivity(intent);
}

当activity B 启动时,它总是必须寻找Intent 的extras 中是否有用户的数据可用,像这样:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_step_one_register_wizard);

    // Get the components of the content layout
    usernameEditText = (EditText)findViewById(R.id.usernameEditText);
    passwordEditText = (EditText)findViewById(R.id.passwordEditText);

    getIntentExtras();
}

private void getIntentExtras() {
    Intent intent = this.getIntent();

    Bundle bundle = intent.getExtras();
    if (bundle != null) {
        usernameEditText.setText(bundle.getCharSequence("usernameEditText"));
        passwordEditText.setText(bundle.getCharSequence("passwordEditText"));
    }
}

现在,可能从 B 处,用户按下任何可用的后退按钮(软或硬)返回到 A。在这种情况下,我们需要将用户的数据放入 Intent 的 extras 中,如下所示:

    /** Called when the user presses the Back soft button*/
public void backButtonOnClick(View view) {
    onBackPressed();
}

@Override
/** Called when the user presses the Back hard button*/
public void onBackPressed() {
    finish();

    Intent intent = this.getIntent();
    intent.setClass(this, StepZeroRegisterWizardActivity.class);
    intent.putExtra("usernameEditText", usernameEditText.getText());
    intent.putExtra("passwordEditText", passwordEditText.getText());
    startActivity(intent);
}

最后,当用户再次按下 continue 软按钮时,新的 Activity B 将拥有用户上次输入的数据。

我希望它可以帮助某人。

于 2012-07-31T17:10:48.093 回答