Androidアプリを作っているとき、どうしてもアクティビティ間で変数をやりとりしたくなる場合があると思います。

それを実現するには、いくつか方法があります。

・intent.putExtra()でインテントでやりとりする

・SQLiteとか使ってデータ保存する

などで可能となりますが、この記事では、グローバル的に変数を扱ってどのActivityからでも共通の変数を参照する方法を解説します。

①Applicationを継承したクラスをつくる

このクラスの中で、共有する変数を宣言します。また、クラス内関数も同じように参照できるので、初期化関数なんかを入れておくと便利です。

import android.app.Application;

public class Globals extends Application {
	//グローバルに使用する変数たち
	int        hoge;
	String    piyo;
	boolean    fuga;
	int[]    hogera = new int[10];

	//ぜんぶ初期化するメソッド
	public void GlobalsAllInit() {
		hoge    = 0;
	piyo    = "あいうえお";
	fuga    = true;

	for (int i = 0; i < hogera.length; i++) {
		hogera[i] = 0;
	}
	}
}

②AndroidManifest.xmlにクラスを記述する

AndroidManifest.xmlの中のapplicationタグの中に、「android:name=”Globals”」という記述を書き加えました。

これを入れないと変数を参照できないので注意してください。

あと、動作確認用に.SubActivityを追加していますが、これは解説用なので各自の環境に合わせてネ。

③Activityのソースコードでグローバル変数を取得する

そして実際にアクティビティ内で参照するには、getApplication()で変数を取得してこないといけません。

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.app.Activity;
import android.content.Intent;

public class MainActivity extends Activity {
	//テキスト
	TextView text;
	//ボタン
	Button button;
	//グローバル変数
	Globals globals;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		//グローバル変数を取得
		globals = (Globals) this.getApplication();
		//初期化
		globals.GlobalsAllInit();

		//取得した文章をレイアウトに配置
		text = (TextView) findViewById(R.id.text);
		String set_text = globals.piyo;
		text.setText(set_text);

		//ボタン定義
		button = (Button)findViewById(R.id.button);
		button.setOnClickListener(NextActivity);
	}

	private Button.OnClickListener NextActivity = new Button.OnClickListener() {
		public void onClick(View v) {
			//グローバル変数に値を入れる
			globals.piyo = "かきくけこ";

			//インテントの生成
			Intent intent = new Intent(MainActivity.this, SubActivity.class);
			//アクティビティの起動
			startActivity(intent);
		}
	};
}

この中で特に大事なのが、

//グローバル変数
Globals globals;

//グローバル変数を取得
globals = (Globals) this.getApplication();

でしょう。

この記述によってGlobalsクラスを使用できるようになります。

参照の仕方は、

//初期化
globals.GlobalsAllInit();

//グローバル変数に値を入れる
globals.piyo = "かきくけこ";

みたいに やります。

さて、intent遷移した先のSubActivityの方も一応書いておきます。

import android.os.Bundle;
import android.widget.TextView;
import android.app.Activity;

public class SubActivity extends Activity {
	//テキスト
	TextView text;
	//グローバル変数
	Globals globals;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_sub);

		//グローバル変数を取得
		globals = (Globals) this.getApplication();

		//取得した文章をレイアウトに配置
		text = (TextView) findViewById(R.id.text);
		String set_text = globals.piyo;
		text.setText(set_text);

	}
}

レイアウトXMLは省略させていただきます。

これを実行すると、こんな感じ。

↓ボタンを押してアクティビティ遷移

と、いう風に、変数のグローバルなやりとりができました!

Post Navigation