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

ページをめくるようにアプリ画面全体を変えたり、設定画面、HELPに画面遷移させたいケースは多々あります。

1x1.trans - [Android]  アプリの画面遷移とActivity間のデータ転送

 
またその時に何らかのデータも同時に転送して、場合によっては遷移先からデータを取得して戻りたい場合の実装方法について考えてみます。
Android Studio
2021.1.1




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

 
画面の遷移だけのケースはActivityの画面遷移にて説明しましたが

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

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

以前は、startActivityForResult(Intent, int)やonActivityResult(int, int, Intent)
これらを使っていましたが registerForActivityResult() を使うことが推奨されています。
アクティビティの結果を取得する
 

 

putExtra & registerForActivityResult()

 
MainActivity から SubActivity への遷移は


でしたが、ここでデータを渡すために
putExtra(name, value) を追加します
渡すデータの key(name) と value を putExtra に入れます
入れるデータの型指定はありません


 
Googleのドキュメント、別の Activity を開始する ではpublicなKeyを設定しています。これはputExtraのReferenceによると
String: The name of the extra data, with package prefix.
とありますので、package名(この例では testactuvitytransdata)をprefixとして例えば、EXTRA_DATAというのを設定します。
 


 
data1 を渡すだけならこれでいいのですが、SubActivity からの返しを受け取りたい場合は
registerForActivityResult() を使います。



registerForActivityResult() は、

ActivityResultContract と
ActivityResultCallback を受け取り

他のアクティビティを開始するために使用する

ActivityResultLauncher を返します。

 

SubActivity データを受け取る

 
渡されたデータを受け取るには


 
受け取るときは、name とデータの型を指定します。
データが int の場合は、初期値を入れます
intent.getIntExtra(name, defaultValue)

その他、
getStringExtra(String name)
getBooleanExtra(String name, boolean defaultValue)
…etc.
Intent reference

 

[back] ボタンタップで元に戻り、データを返す

 
SubActivity から戻るときにデータを返すには同様に
putExtra(name, value)
を使います
 

 

元の画面でデータを受け取る

 
SubActivity から ActivityResultLauncher でデータを受け取り、
RESULT_OKであるか判定してデータを受け取ります。

 

サンプルコード

 
色々追加して、以下のような機能でまとめてみます。
MainActivityで文字入力
SubActivityで受け取って表示
SubActivityから、受け取った文字列に追加して戻す
MainActivityではSubActivityから戻された文字列を表示
尚、Key nameはEXTRA_MESSAGEとして設定しました
 
MainActivity.java


 
遷移先のActivity
SubActivity.javaを作成します。
 
1x1.trans - [Android]  アプリの画面遷移とActivity間のデータ転送


 
SubActivity.java


 
Manifest に SubActivity の記述も忘れずに。
AndroidManifest.xml


 

MainActivityのレイアウト
activity_main.xml

 
SubActivityのレイアウト
activity_sub.xml

 
リソースです
strings.xml

 

 
 
関連ページ:

Ref:
アクティビティ | Android Developers

シェアする

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

フォローする