startActivityForResultを使ってみる (Android Kotlin)



今までActivity間の画面遷移におけるデータの受け渡しは、シングルトンやPreferenceなどでパターンでやっていたが、簡単なものならstartActivityForResultを使えば便利そうだ。
ここでは単純なモデルで、startActivityForResultを使ったデータの受け渡しの動作確認をしていこう。




仕様


MainActivityとSubActivityを作って、このように遷移させる。



SubActivityからメッセージを受け取って、MainActivityのTextViewへ反映させるといったシンプルなものだ。また、端末の戻るボタンで戻った場合には、違うメッセージを表示させる。


MainActivity


それでは、MainActivityから見ていこう。



startActivityForResult(intent, 9) では、AcrequestCodeに値をセットすることで、Activityごとに処理を分けることができる。

onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) は、戻ったときにコールバックされるメソッドだ。ここでは、resultCodeでActivityを識別して、Intentからデータを取り出している。また、Activity.RESULT_CANCELEDの場合は、端末の戻るボタンが押されたものと判断させている。


SubActivity


次に、遷移先であるSubActivityを見ていこう。


setResult(Activity.RESULT_CANCELED)で予めキャンセル指定している。最初にキャンセルされた結果をセットしておくことで、端末の戻るボタンでRESULT_CANCELEDが認識されるようにしている。しかし、デフォルトでRESULT_CANCELEDが設定されているようなので、この記述はなくても良いのかもしれない。
setResult(Activity.RESULT_OK, Intent)では、渡したいデータをIntentを使ってセットしている。この場合、キーを"message"とし、値に "Hello! I'm from SubActivity!⛄️" をセットしている。

以上のようにプログラムすることで、最初の図のような画面結果が得られる。


Intentの役割




「基本からしっかり身につくAndroidアプリ開発入門」 の117ページに書かれているとおり、コンポーネントは、他のコンポーネントを呼び出すことができる。そのときに、情報をメッセージとしてAndroidシステムに渡す仕組みをIntentと呼ぶ。ここでのコンポーネントとは、アクティビティやサービスのことである。
つまり、ActivityからActivityへ直接値を渡しているのではないということ。AndroidシステムへIntentを投げて、それに適合したActivityが呼び出されるといったイメージだ。




関連記事


非同期 & ネットワーク処理
はじめてRetrofitを使ってみる (Android Kotlin)
非同期処理でCoroutine(コルーチン)を使ってみる (Android Kotlin)
OkHttpでHTTP通信 (Android Kotlin)
スレッド処理 (Android Kotlin)

View & レイアウト
リサイクラービューを使ってリスト表示 (Android Kotlin)
角丸表現 (Android Kotlin)
onSaveInstanceStateで画面回転時の状態の保存と復元 (Android Kotlin)
ListViewを簡単なモデルで理解しよう (Android Kotlin)
バネアニメーション (Android Kotlin)
startActivityForResultを使ってみる (Android Kotlin)
ActivityとFragmentの連携を理解する (Android Kotlin)
DataBinding機能を使ってみる (Android Kotlin)
タッチイベントのフック (Android Kotlin)
DialogFragmentを使ったダイアログの表示 (Android Kotlin)

サウンド
これってSoundPoolのバグ?(Android Kotlin)
SoundPoolを使ってゲームの効果音を再生する (Android Kotlin)

データ & オブジェクト
Kotlinでオブジェクト(object)の動作確認
データクラスとタプル (Android Kotlin)
Null安全、ぬるぽバイバイ (Android Kotlin)




あなたにおすすめ