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)