ページをめくるようにアプリ画面全体を変えたり、設定画面、HELPに画面遷移させたいケースは多々あります。
またその時に何らかのデータも同時に転送して、場合によっては遷移先からデータを取得して戻りたい場合の実装方法について考えてみます。
Android 9.0
Activity 画面を遷移しデータを受け渡すアプリ
画面の遷移だけのケースはActivityの画面遷移にて説明しましたが
- 遷移したタイミングでデータを渡したい
- 遷移先から戻るタイミングでデータを受け取りたい
という場合にはIntentを使ってActivity間でデータを渡すことができます。
Activity間で共通のデータとして扱いたい場合は(積極的にお勧めしませんが)グローバル変数を使うこともできます。
ここではIntentを使って試してみます
- startActivityForResult(Intent, int)
- onActivityResult(int, int, Intent)
を使います。
1.MainActivity :putExtra & onActivityResult
2.SubActivity :データを受け取る
3.SubActivity :[back] ボタンのタップで元に戻り、データを返す
4.MainActivity :元の画面でデータを受け取る
putExtra & onActivityResult
MainActivity から SubActivity への遷移は
でしたが、ここでデータを渡すために
putExtra(name, value) を追加します
渡すデータの key(name) と value を putExtra に入れます
入れるデータの型指定はありません
別の Activity を開始する ではpublicなKeyを設定しています。これはputExtraによると
String: The name of the extra data, with package prefix.
とありますので、package名をprefixとして例えば、EXTRA_DATAというのを設定します。
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から戻された文字列を表示
尚、Key nameはEXTRA_MESSAGEとして設定しました
MainActivity.java
遷移先のActivity
SubActivity.javaを作成します。
SubActivity.java
MainActivityのレイアウト
activity_main.xml
SubActivityのレイアウト
activity_sub.xml
リソースです
strings.xml
Manifest に SubActivity の記述も忘れずに、package名は適宜合わせてください。
AndroidManifest.xml
関連ページ:
- アプリの画面を遷移させる
- アプリの画面遷移とActivity間のデータ転送
- グローバル変数を使ってActivity間でデータを渡す
- Activity Life Cycle と画面回転