質問

ウィザードスタイルのアプリケーションを作成しています。ここで、私はアクティビティ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時間を入力したデータを持ちます。

誰かを助けることを願っています。

他のヒント

クリルツのコメントとしてやってみる。あるいは、フラグメントを使用したい場合があります。3.xより古いSDKをターゲットにした場合は、サポートライブラリ

ウィザードスタイルを使用するSDKフォルダ内にサンプルプロジェクトがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top