KotlinでのActivityの遷移とそれに伴ってデータを別Activityに送る、またそのActivityから何かのデータを受け取る方法について調べてみました。
2024.1.1
Activity 画面を遷移しデータを受け渡すアプリ
画面遷移だけのKotlinのケースは、
にて説明しましたが、
- 遷移したタイミングでデータを渡したい
- 遷移先から戻るタイミングでデータを受け取りたい
という場合にはIntentを使ってActivity間でデータを渡すことができます。
以前は、startActivityForResult(Intent, int)とonActivityResult(int, int, Intent)
これらを使っていましたが
AndroidX Activity と Fragment で導入された Activity Result API を使用すること推奨されています応(Activity クラスでは使用できますが…)アクティビティの結果を取得する
1. MainActivity :putExtra & onActivityResult
2. SubActivity :データを受け取る
3. SubActivity :[back] ボタンのタップで元に戻り、データを返す
4. MainActivity :元の画面でデータを受け取る
5. サンプルコード
MainActivity: putExtra & registerForActivityResult()
MainActivity から SubActivity への遷移は
別の Activity を開始する ではpublicなKeyを設定しています。これはputExtraによると
String: The name of the extra data, with package prefix.
とありますので、例えばpackage名をprefix(com.example.testactivitytransdata)としてEXTRA_MESSAGEというのを設定します。
このEXTRA_MESSAGEを使って putExtra(name, value) に渡すデータの key(name) と value を入れます
入れるデータの型指定はありません
data を渡すだけならこれでいいのですが、SubActivity からの返しを受け取りたいので
registerForActivityResult()で受け取り、返ってくる結果が正常か、またリクエストコードの判定をします。it がActivityResult になります。
SubActivity: データを受け取る
渡されたデータを受け取るときには、型に合わせてgetString()などを使います
name とデータの型を指定します。
データが int の場合は、初期値を入れますがString型ではいりません。
その他、
getBooleanExtra(String name, boolean defaultValue)
…etc.
Intent reference
SubActivity: [back] ボタンタップで元に戻り、データを返す
SubActivity から戻るときにデータを返すには同様に
putExtra(name, value)
を使います
MainActivity: 元の画面でデータを受け取る
SubActivity からのデータを受け取るにはregisterForActivityResult()から、RESULT_OKであるか判定してデータを受け取ります。
サンプルコード
色々追加して、以下のような機能でまとめてみます。
MainActivityで文字入力
SubActivityで受け取って表示
SubActivityから、受け取った文字列に追加して戻す
MainActivityではSubActivityから戻された文字列を表示
MainActivity.kt
遷移先のActivity
SubActivity.ktを作成し
コードを記述します。
SubActivity.kt
以下はレイアウトやリソースです
activity_main.xml
SubActivityのレイアウト用のxmlファイルを作成
activity_sub.xml
リソースです
strings.xml
Manifest に SubActivity の記述も忘れずに、package名は適宜合わせてください。
AndroidManifest.xml
View Binding の設定
build.gradle
References:
アクティビティの結果を取得する | Android デベロッパー | Android
Activity | Android Developers
別の Activity を開始する | Android Developers
Intent | Android Developers