flag_activity_reorder_to_frontとonbackpressed()を一緒に使用する方法
-
13-12-2019 - |
質問
ウィザードスタイルのアプリケーションを作成しています。ここで、私はアクティビティAとBの間でユーザーデータを保存する必要があります。 Aは次のソフトボタンを持っていて、Bは背中のソフトボタンを持っています。
FLAG_ACTIVITY_REORDER_TO_FRONT
を使用する場合、各アクティビティは再利用されているため、ソフトボタンが使用されているときにユーザーデータが生き続けることができます。
しかし、ユーザーがBのBACKボタンを押すと、そのハードボタンが暗黙のうちに終了()を使用しているため、BのDIESの場合、B、Bが発生します。
その後、Backのソフトボタンと同じ動作を追加しました。背中のハードボタンとはまったく前のボタン(B)のように動作すると考える(B)。
今、バックハードキーを持つBからAに戻って、すべてが大丈夫です。この時点でAの焦点が合っている場合、ユーザーがバックハードボタンをもう一度押すと、予想される動作はアプリケーションが去ることです。
問題は、Bがまだ生きていることを考えると、予想される行動が発生しないことです。そのため、BのオーバーライデンonBackPressed
はまだリスニングされており、その他の行動ocustr。
BでオーバーライデンonBackPressed
を使って聴くことができますので、フォーカスがアプリケーションの葉にあるときは?
事前にありがとうございました。
解決 2
ええと、私は自然なAndroidソリューションで問題を解決できました:
クリレスのヒントに続いて、flag_activity_reorder_to_frontを使って停止しましたので、もうハードボタンとの競合はありません。今、私はウィザードを起動する意図をリサイクルしています。
では、ユーザーがBを押し続けるためにユーザーがBに進むときに呼び出される非常に一般的な方法があります。アクティビティAは単なる有益なものであるため、行くときにユーザーのデータをユーザーのデータに入れる必要はありません。 b、このように:
/** Called when the user presses the Continue button*/
public void continueButtonOnClick(View view) {
Intent intent = this.getIntent();
intent.setClass(this, StepOneRegisterWizardActivity.class);
startActivity(intent);
}
.
アクティビティBが起動すると、このように、インテントのエクストラでユーザーのデータが利用可能な場合は常に求められている必要があります。
@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から、ユーザーはAVをAVに戻す(ソフトまたはハード)のバックボタンを押してください。この場合、このように、ユーザーのデータをインテントのエクストラに入れる必要があります。
/** 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);
}
.
最後に、続行ソフトボタンをもう一度押すと、新しいアクティビティBはユーザーがLAS時間を入力したデータを持ちます。
誰かを助けることを願っています。