0

A、B、Cの3つのアクティビティがあります。

AはBでstartActivityForResult(getIntent(), ACTIVITY_B);始まり、BはCで始まりstartActivityForResult(getIntent(), ACTIVITY_C);ます。ACTIVITY_BおよびACTIVITY_Cは、アクティビティ間で同じ値を持つ定数です。

CがRESULT_OKで戻ると、Bは次のコードで再起動されます。

if (resultCode == Activity.RESULT_OK){
    finish();
    startActivityForResult(getIntent(), ACTIVITY_B);
}

これは正常に機能します。

Bが(メニュー項目をクリックして)戻る必要がある場合、Bはアクティビティ結果を設定します。

public boolean onMenuItemSelected(int featureId, MenuItem item) {
    switch(item.getItemId()) {
        case MENU_CONFIRM:
            System.out.println("Setting Result to RESULT_OK");
            setResult(Activity.RESULT_OK);
            finish();
            return true;
    }
    return super.onMenuItemSelected(featureId, item);
}

ただし、アクティビティA( )のようにsetResult(Activity.RESULT_OK);常に受信されるため、が無視されていることがわかります。2.3を使用しています。RESULT_CANCELonActivityResult

手がかりはありますか?

4

2 に答える 2

0

インテントとアクティビティのライフサイクルをどのように処理しているか興味があります。

私があなたの両方の投稿で読んだことから:

  • AはstartActivityForResult()でBを開始します。
  • BはstartActivityForResult()でCを開始します。
  • Cはタスクを完了し、setResult()およびfinish()を呼び出します。

足りないものがない限り、アクティビティBは次のコードを使用します。

if (resultCode == Activity.RESULT_OK){
    finish();
    startActivityForResult(getIntent(), ACTIVITY_B);
}

自分自身を開始するには?これを明確にしていただけますか?

添加

BからBを開始していると思います。そのため、Bの2番目のインスタンスでsetResult()とfinish()を呼び出すと、最初のBアクティビティに戻ります。

特別なインテントフラグを使用していない場合、ライフサイクルは次のようになります。

  • AスタートB
    • BはCを開始します
      • Cフィニッシュ
    • Bは自動的に再開し、Bは終了します
  • 自動的に再開します。

私が理解していることから、あなたはそのサイクルを次のように変更しました。

  • AスタートB

    • BはCを開始します
      • Cフィニッシュ
    • Bは自動的に再開し、onActivityResult()は2番目のBを開始します
      • 2番目のBが終了します(ただし、次にAが表示されることを期待しています...)
    • Bは自動的に再開します(finish()を再度呼び出すと、この時点でAが表示されます)。

    ..。

  • Aはスタックで再開されるのを待っています。
于 2012-06-15T03:47:33.140 に答える
0

Bを終了して新しいものを開始しないでください。開いたBではないため、Aは通知されません。代わりに、Cが終了時に何かをBに返す必要がある場合は、インテントを作成し、その上に結果値を配置して、この結果をBで確認します。

C:

Intent data = new Intent();
// Store values you want to return on the intent
setResult(RESULT_OK, data);
finish();

B:onActivityResult内

if (resultCode == Activity.RESULT_OK) {
  // get values from the intent and change B accordingly
}
于 2012-06-15T05:36:28.437 に答える