2012年6月29日金曜日

onActivityResultとsetResultについてメモ

Activityから設定画面などの別のIntentを呼び出した際の流れについて調べてみた。

呼び出したIntent(=Intent B)から結果を受け取るとき、呼び出したActivity(=Activity A)のonActivityResultをハンドリングして受け取るのだけど、Intent BでsetResultで結果をセットするのはどこが適切なのか、というのが気になって。

初め、Intent BのonStopで実行してみたのだけど、デバッガで処理を追ってみるとIntent BのonStopよりもActivity AのonActivityResultの方が先に呼び出されてることがわかった。

もっと詳しく調べてみると、Intent BでBACKボタンをタップした時、

Intent BのonKeyDownメソッド

Intent BのonBackPressedメソッド

Intent BのonWindowFocusChangedメソッド

Intent BのonPauseメソッド

Activity AのonActivityResultメソッド

Intent BのonStopメソッド

と、こんな順に呼び出されてる。なのでIntent BのonStop内でsetResultで結果をセットしても、Activity AのActivity AのonActivityResultメソッドではその結果を受け取る事が出来ない。

onWindowFocusChangedやonPauseメソッドは別アプリに切り替わった時などでも呼ばれるので却下。そこで、onBackPressedメソッドで


  @Override
  public void onBackPressed() {


      Intent intent = new Intent();
      intent.putExtra(KEY, VALUE);


      setResult(RESULT_OK, intent);
      finish();


      // TODO 自動生成されたメソッド・スタブ
      //super.onBackPressed();
  }


というようにすることでActivity AのonActivityResultメソッドで結果を受け取る事ができた。

0 件のコメント:

コメントを投稿