[Android & Kotlin ] アプリの画面遷移とActivity間のデータ転送

KotlinでのActivityの遷移とそれに伴ってデータを別Activityに送る、またそのActivityから何かのデータを受け取る方法について調べてみました。
 
1x1.trans - [Android & Kotlin ] アプリの画面遷移とActivity間のデータ転送


Android Studio
2021.1.1




Activity 画面を遷移しデータを受け渡すアプリ

 
画面遷移だけのKotlinのケースは、
 

Kotlinを使ってJavaと同じようにActivity間を遷移させる方法です。また同じActivity内で画面を変える方法もあります。 ...

 
にて説明しましたが、

  1. 遷移したタイミングでデータを渡したい
  2. 遷移先から戻るタイミングでデータを受け取りたい

という場合にはIntentを使ってActivity間でデータを渡すことができます。

以前は、startActivityForResult(Intent, int)とonActivityResult(int, int, Intent)
これらを使っていましたが
AndroidX Activity と Fragment で導入された Activity Result API を使用すること推奨されています応(Activity クラスでは使用できますが…)アクティビティの結果を取得する
 

 

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


 
MainActivityのレイアウトです。作りやすさでLinearLayoutを選んでますがデフォルトの constraintlayout ではないので注意してください。

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

シェアする

  • このエントリーをはてなブックマークに追加

フォローする