[Android] グローバル変数を使ってActivity間でデータを渡す

Activity間でデータを渡したいケースでIntentを使うケースを試しましたが、Global変数を使うという事もできます。

Android Studio
2021.1.1




グローバル変数

 
いきなりですが、Singletonで作れるのであれば、あえてこのやり方をとることはないとは思います。

Note: There is normally no need to subclass Application. In most situations, static singletons can provide the same functionality in a more modular way.

Ref: Application | Android Developers

setter(),getter()など今では古いやり方も使いますし、こういうのもあると覚えておくと古いコードのメンテナンスに役立つかもしれません
 

 

android.app.Applicationを継承したクラス

 
Activityのライフサイクルとは別にApplication内でのデータ共有を行うためにandroid.app.Applicationがあります。
これを継承したクラスを作ってAndroidManifestに登録して、メソッドとしてsetter(), getter()を作成しておき、Activityから設定、読み出しを行います。
 
MyAppという名前でandroid.app.Applicationを継承したクラスを生成します。またデータの読み書きができるメソッドを作っておきます。
 
これから作っていく全体像としては、MainActivityとSubActivityから独立したクラスMyAppというものを設定して、そのプロパティとして例えばtestStringがあります。これに対してそれぞれのActivityからアクセスして読み書きをするわけです。
 
1x1.trans - [Android]  グローバル変数を使ってActivity間でデータを渡す


 
MyApp.java

 

AndroidManifestへの登録

 
先に作成したクラスをandroid:nameに設定します。
追加で遷移先のSubActivityも使うので登録

AndroidManifest.xml

 

Activityからの呼び出し

 
グローバル変数への書き込みのメソッドができているので、アプリケーションクラスのインスタンスを生成してそのメソッドを呼びます。

ButtonのタップでEditTextで入力した文字列をグローバル変数として登録してSubActivityへ遷移。MainActivityからSubActivityへ遷移するところはIntentを使っています。

MainActivity.java


 
getApplication()を使ってMyAppインスタンスを生成して、そのグローバル変数の読み出しメソッドからテキストを読みだして表示します。

SubActivity.java


 
レイアウトファイルです。
activity_main.xml


 

activity_sub.xml


 
strings.xml


 
Android Studioのプロジェクトで作成あるいは変更したファイルです。
 
1x1.trans - [Android]  グローバル変数を使ってActivity間でデータを渡す

 

サンプル動画

 

 
Actvityが複数あり、変数を共有したい場合には役立つかもしれませんが注意点もあります。

今更ですが可読性が落ちるとかバグの温床だとか悪者扱いされやすいのです。簡単なプロジェクトであればそれほどでもありませんが大規模なプロジェクトでは敬遠されます。

ということも心に留めておきましょう。
 
 
Reference:
Application | Android Developers

シェアする

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

フォローする