6

私には、一緒に生きるか死ぬかしなければならない一対の活動があります。基本的に、AlphaActivity は何らかの作業を行ってから、startActivityForResult()BetaActivity のインテント ( ) をディスパッチします。BetaActivity が完了したら、GammaActivity のインテント ( startActivity()) をディスパッチしてから、それ自体を呼び出しfinish()ます。終了したら、AlphaActivity のonActivityResult()メソッドが呼び出されることを望んでいましたが、それは決して起こらないようです。私の設計では、AlphaActivity の 内onActivityResult()で を呼び出しますfinish()。私の計画では、GammaActivity に達すると、ユーザーは AlphaActivity にも BetaActivity にも戻ることができなくなります。しかし現在、戻るボタンはユーザーを AlphaActivity に連れて行きます。

なぜうまくいかないのかについてはいくつかの考えがありますが、実際に何がうまくいくのかに興味があるので、ここでそれらについて議論することは無意味です.

編集:

コードはすべて非常に標準的なものです。

アルファ内部から

private void startBetaActivity() {
    Intent intent = new Intent(this, BetaActivity.class);
    startActivityForResult(intent, Constant.EXIT_CODE);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {
        if (requestCode == Constant.EXIT_CODE) {
            this.finish();
        }
    }
}

ベータ版の内部から:

if (success) {
            startGammaActivity();
            finish();
        }
4

3 に答える 3

6

私はあなたがする必要があると思います:

if (success) {
        startGammaActivity();
        setResult(Activity.RESULT_OK); //add this
        finish();
}
于 2013-04-25T00:24:59.033 に答える
5

私の見解では、これに従う必要があります。

  1. AlphaActivity は、X 要求コードで結果の BetaActivity を開始します
  2. BetaActivity は自分の作業を行い、次に setResult(Y, Z) を呼び出し、finish() を呼び出します
  3. AlphaActivity は、RequestCode X、ResultCode Y、およびデータ Z を使用して onActivityResult を実行します。X と Y が予期したものである場合、GammaActivity を開始し、最後に AlphaActivity で finish() を呼び出します。

AlphaActivity onActivityResult が正しく機能しないため、BetaActivity で GammaActivity を開始しないでください。

于 2013-04-25T00:18:39.117 に答える
4

setResult() を呼び出していません

if (success) {
        startGammaActivity();
        setResult(RESULT_OK);
        finish();
    }

または、両方のアクティビティマニフェストにBetaActivity戻る必要がない場合AlphaActivityandroid:noHistory=true

于 2013-04-25T00:22:40.907 に答える