2011-07-05 12 views
0

私のアプリケーションでは、これが必要なときに特定の結果コードを使用してアプリケーション全体を終了します。アクティビティスタック)。すべてのアクティビティはstartActivityForResult()で開始されます。結果コードはonActivityResult()で取得され、そこからアクティビティスタックの次のアクティビティに渡されます。これは、特定の結果コードが使用されているときに、各アクティビティーが終了するまで続きます。スタック内で完了アクティビティと同じアクティビティに達したときにonActivityResult()が呼び出されない

は、一つを除いて全ての場合において、..大きな作品:

はAからなるアクティビティスタックを考える - > B - > A.最後A(右シーケンスで)自体の設定を終了することにより手順を開始します他のアクティビティも終了するための結果コード。 Bが終了し、結果コードを最初のA(シーケンスの左A)に渡すと、onActivityResult()は呼び出されません。

最初のAに達したときにonDestroy()がまだスタックの最上位のA(シーケンスの右のA)に対して呼び出されていないことに言及することは有益です。

この問題を解決する方法または問題を回避するにはどうすればよいですか?

+0

'AndroidManifest.xml'のAやBアクティビティのために' android:launchMode'に何か設定されていますか? – inazaruk

+0

いいえ、私はsingleTopを一回使ってみましたが、自然には役に立ちませんでした。 – Vanja

+0

私のローカルの例ではすべて正常に動作します。おそらくあなたが紛失しているものがあります。ここでコード例をアップロードしました:https://github.com/inazaruk/examples/tree/master/ActivityResultこれがあなたに役立つかどうかを見てください。 – inazaruk

答えて

0

それは活動が次のコードで書かれたメニューから起動した場合、この問題が唯一の登場が判明:

private static final int MENU_ITEM_A = 0; 
    private static final int MENU_ITEM_B = 1; 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     menu.add(0, MENU_ITEM_A, 0, R.string.menu_item_a); 
     menu.add(0, MENU_ITEM_B, 0, R.string.menu_item_b); 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     intent = null; 

     switch (item.getItemId()) { 
     case MENU_ITEM_A: 
      intent = new Intent(this, ActivityA.class); 
      break; 
     case MENU_ITEM_B: 
      intent = new Intent(this, ActivityB.class); 
      break; 
     default: 
      intent = null; 
      Log.e(TAG, "Unkown menu item."); 
     } 
     if (intent != null) { 
      intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
      startActivityForResult(intent, 
       ActivityHelper.AUTO_CLOSE_REQUEST_CODE); 
     } 
     return super.onOptionsItemSelected(item); 
    } 

ここで文字列リソース

<string name="menu_item_a">Start Activity A</string> 
    <string name="menu_item_b">Start Activity B</string> 

は単純にこのコードを追加していますbase inazarukのコードサンプルのアクティビティを自分で確認します。メニューからアクティビティAとアクティビティBを数回切り替えてから、スタック内のすべてのアクティビティを閉じるようにしてください。うまくいかないだろう。

今、一つは原因が意図フラグだったと思うだろう:

Intent.FLAG_ACTIVITY_REORDER_TO_FRONT 

しかし除外このinazarukからコード内のすべての意図にこのフラグを追加します。

誰かが何が起こったのかを正確に説明できれば、聞くのはすばらしいことです。