Furudateのブログ

プログラミングやネットワーク系の知識・技術がメインのブログ。技術メモ帳的な感じになるかと。岩手から発信していきます。

【Android】シングルトンパターンを用いてグローバルのような共通クラスを作成

こんばんは。

前回、Intentでクラスの受け渡し方法について書きました。

しかし、これだと各Acitvityで二次元配列のようなオブジェクトを共通に扱うことは出来ません。
そこで、今回オブジェクトをグローバルのように扱える方法を書いていきたいと思います。

これを用いると二次元配列をActivityをまたいで参照・編集することが可能になります!

方法としては、シングルトンパターンのクラスを作成します。
シングルトンパターンは、コンストラクタをprivateにし、一つだけインスタンスを作成します。このインスタンスはprivateなstatic変数として保持します。
こうすることで、アプリがロードされた時一度だけインスタンスが生成されます。

以下シングルトンパターンのクラスの例です。以下の例では、SparseArray型の二次元配列を扱います。

シングルトンパターンクラス作成

public class TestData {
	// シングルトンパターンでインスタンスを共通化
	private static TestData instance = new TestData();
	
	// コンストラクタ。ここでは何もしない
	private TestData(){};
	
	public static TestData getInstance(){
		return instance;
	}
	// ここまでの処理で、共通化(シングルトン)を行う
	
	// テスト問題データの配列
	SparseArray<HashMap<String, String>> rootData = new SparseArray<HashMap<String, String>>();
	
	/**
	 * ゲッター
	 * @return 保存されているテストデータ
	 */
	public SparseArray<HashMap<String, String>> getRootData() {
		return rootData;
	}
	
	/**
	 * セッター
	 * @param rootData 保存するテストデータ
	 */
	public void setRootData(SparseArray<HashMap<String, String>> rootData) {
		this.rootData = rootData;
	}
}

つぎにこのクラスを用いてデータの受け渡しを行います。

データの受け渡し

// テストデータ取得
TestData testData = TestData.getInstance();
rootData = testData.getRootData();

if (rootData.size() == 0); // データがあるかどうかの判定。0の場合は初期化されている

testData.setRootData(rootData); // テストデータをセット

// データを初期化(再編集したい場合などに使う)
rootData = new SparseArray<HashMap<String,String>>();
testData.setRootData(rootData); // テストデータをセット


以上です。
二次元配列のデータの受け渡し方法が分からず、ものすごい悩んでいましたがこれで解決しました!
ただ、もう少し簡単にオブジェクトを扱えるようにしてくれると嬉しいですね。。

それでは。