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

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

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

Android Studio 3.1
Android 8.1.0

 



グローバル変数

 

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
いきなり否定的なのですが、Singletonで作れるのであれば、あえてこのやり方をとることはないとは思います。setter(),getter()など今では古いやり方も使いますし、こういうのもあると覚えておくだけかもしれません
 

 

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

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

 

サンプル動画

 

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

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

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

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加


 


ページのトップへ戻る




シェアする

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

フォローする