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メソッドで結果を受け取る事ができた。
2012年6月29日金曜日
2012年6月19日火曜日
Androidアプリの勉強中
こんな開設したばかりブログ、誰も見ていないと思うけど…。
昨年某会社からリストラされてから、就職活動を続ける傍ら、Androidアプリの作り方について勉強してみようと思ったわけです。
Androidアプリでは他のアプリとかぶらないpackage名を使用することになっていますが、Android Developersで登録するよりもブロクのアドレス(ドメイン名)を使ったほうがはるかに楽そうだったのでブロクを登録してみようと思ったわけです。
今は簡単なアプリの一本があらかた出来上がってきて、微調整する傍らGoogle Playに登録する方法について調べているところです。
2012年6月18日月曜日
登録:
投稿 (Atom)