好吧,我可以用一个自然的 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 将拥有用户上次输入的数据。
我希望它可以帮助某人。