アクティビティ終了時に結果を受け取る方法
あるアクティビティを別のアクティビティを起動して終了したら何か値を渡せると便利なことがります。
例えば画像を表示するアクティビティ(ImageActivity)があってそこから画像一覧を表示するアクティビティ(ImageChoiceActivity)を起動したとします。
ImageActivity内int CHOICE_REQUEST = 0; ///リクエストコード Intent choiceIntent = new Intent( this, ImageChoiceActivity.class); startActivityForResult(choiceIntent, CHOICE_REQUEST);
アクティビティ終了後にその結果を受け取るにはstartActivityForResultに起動するアクティビティのインテントとアクティビティを識別するリクエストコードを渡します。
起動したアクティビティ内で何か処理が終了して結果を返したい場合は次のようにします。
ImageChoiceActivity内Intent resultIntent = new Intent(ImageChoiceActivity.this, ImageActivity.class); resultIntent.putExtra("IMAGE_PATH", "選択された画像パス"); setResult(RESULT_OK, resultIntent); finish();
ここでは結果として選択された画像のパスを渡しています。
finishメソッドで終わる前にsetResultで必要なデータを渡しておけば起動元のアクティビティのonActivityResultでそれを受け取ることができます。
そのコードは次のようになります。
ImageActivity内@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode){ case CHOICE_REQUEST: if(resultCode == RESULT_OK){ String imagePath = data.getStringExtra( "IMAGE_PATH"); Log.d("ImageActivity", "画像パス = " + imagePath); } break; } }
onActivityResultをオーバーロードしてアクティビティごとのリクエストコードごとの処理を書いていきます。
もしresultCodeがRESULT_OKなら終了時に起動アクティビティから渡されたインテントからデータを取得できます。
まとめ
いままでの説明を簡単に箇条書きしてまとめてると次のようになります。
- あるアクティビティからstartActivityForResultで別アクティビティ起動
- 別アクティビティの処理
- 別アクティビティが終了したらfinishする前にsetResultで結果を渡す
- 起動元アクティビティのonActivityResultが呼ばれる
- リクエストコードに応じて結果を処理する
大雑把に書くとこんな手順になります。
以上、アクティビティ終了時の結果の受け取り方でした。では、また!
© Kaz