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

ページをめくるようにアプリ画面全体を変えたり、設定画面、HELPに画面遷移させたいケースは多々あります。
 
またその時に何らかのデータも同時に転送して、場合によっては遷移先からデータを取得して戻りたい場合の実装方法について考えてみます。
 

Android Studio 2.3.3
Android 7.1.1

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

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

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

という場合にはIntentを使ってActivity間でデータを渡すことができます。
Activity間で共通のデータとして扱いたい場合はグローバル変数がいいかもしれません。

ここではIntentを使って試してみます

  • startActivityForResult(Intent, int)
  • onActivityResult(int, int, Intent)

を使います
 
こんなアプリを作ってみたいと思います
 

 

putExtra & onActivityResult

 
MainActivity から SubActivity への遷移は

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

 
data1 を渡すだけならこれでいいのですが、SubActivity からの返しを受け取りたいので

startActivityForResult と返ってくるリクエストコードを設定します
また、返ってきたときに受け取りは、onActivityResult で受け取ります

 

 

SubActivity データを受け取る

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

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

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

 

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

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

 

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

 
SubActivity からのデータを受け取るにはonActivityResult 内で受け取ります
この受け取りでは、MainActivity は onCreate() から始まらずに onActivityResult に到達します

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

 
遷移先のActivity
SubActivity.javaを作成します。
 

 
SubActivity.java

 
MainActivityのレイアウト
activity_main.xml

 
SubActivityのレイアウト
activity_sub.xml

 
Manifest に SubActivity の記述も忘れずに、package名は適宜合わせてください。
AndroidManifest.xml

 

 
 
関連ページ:

Ref: Activity