2

私には2つの活動があります。それらをAとBと呼びましょう。

Aは、アプリの2か所から開始できるアクティビティです。Aが場所1または2のどちらから開始されたかを知りたいので、BIでは次のようにAを呼び出します。

Intent i = new Intent(B.this, A.class);
i.putExtra("code", code);
startActivityForResult(i, code);

code値が1のintです。)

AIのonCreateメソッドでこれを行います:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    Intent i = getIntent();
    Bundle extras = i.getExtras();
    if(extras != null)
    {
        int code = extras.getInt("code");
        if(code == 1)
        {
            ClearReleasesCache(); // just a private method of A
            setResult(1, i);                
            finish();
            return;
        }
    }

    // do everything else as usual
    setContentView...
}

さて、問題はこれです(私はデバッグでそれに気づきました):

コードがここに示すように、 BからAを起動するとき、Aを終了させたいです。Bではない別のアクティビティからAを起動するときは、通常どおりに実行する必要があります(実際に実行します)。ただしfinish()returnここでは何もしません。デバッグ時に、return呼び出しの後、onCreateにジャンプして戻り、アクティビティがシャットダウンされないことがわかります。

つまりonActivityResult()、Bでは呼び出されません。

ここで何が問題になっていますか?

4

5 に答える 5

1

作成する前にどのように終了できますか..現在の実行が完了すると終了します..何かの途中で突然終了するわけではありません...そしてそれも理にかなっています..

于 2012-04-19T13:22:12.587 に答える
0
 if(extras == null || extras.getInt("code") != 1) {
         // do everything else as usual
 } else
       finish();

if条件を切り替えることはできませんか?

編集:しかし、returnステートメントが機能しないことを確認しますか?

于 2012-04-19T13:15:44.077 に答える
0

また、finish()の後にreturnステートメントを追加することもできます。

于 2012-04-19T13:17:57.463 に答える
0

これを設定してみてくださいsetResult(RESULT_OK, i);。RESULT_OKとは異なるresultCodeを渡したときに同様の問題が発生しました。その場合、onActivityResult()は呼び出されませんでした。

于 2012-04-19T13:24:14.583 に答える
0

正しいと思われるもの-親アクティビティをチェックして、nullエクストラを使用してアクティビティを再起動する可能性があるかどうかを確認しましたか?

修正のためにロジックをわずかに調整することもできます。

Intent i = getIntent();
Bundle extras = i.getExtras();
if(extras != null && extras.getInt("code") == 1) {
    ClearReleasesCache(); // just a private method of A
    setResult(1, i);                
    finish();
    return;
} else {

    // do everything else as usual
    setContentView...
}

ただし、Parent(calling)Actvityからのロジックが正しくない場合は、同じ結果が得られる可能性が高くなります。

于 2012-04-19T14:21:57.627 に答える