「Androidアプリでのモデル表現方法を考える | hiro345」で簡単に紹介しましたが、Androidアプリケーションにおけるデータ保持の方法にはいくつかあります。これらについて、どのように使い分けるがよいのか、具体的な実装方法を見て、考えてみましょう。
たとえば、次のように、キーと値の集合に名前をつけたオブジェクトを表現するクラスを用意したとします。オブジェクトをファイルで簡単に保存できるよう、Serializableインターフェイスを実装しています。集合の実装については、将来HashMapクラス以外を採用するかもしれないので隠蔽して、getValueメソッド、putValueメソッドで集合データへのアクセスをするようにしています。
package org.sssg.soft.sample.application; import java.io.Serializable; import java.util.HashMap; public class SampleData implements Serializable { private static final long serialVersionUID = 1L; private String name = "SampleDataStore"; private HashMap<Integer, String> map = new HashMap<Integer, String>(); public String getName() { return name; } public String getValue(int id) { return map.get(id); } public void putValue(int id, String value) { map.put(id, value); } }
これをアプリケーション内で保持するには、どうすれば良いでしょう。Activityが1つしかないような本当にサンプルレベルのアプリケーションなら、Activityのフィールドへいれておけばよいでしょう。画面表示に必要な情報や画面で入力されたイベントや情報はすべてActivity経由となるわけですから、ここにおくのは自然な考え方です。サンプルアプリでもよく採用されています。ここでは、SimpleApplicationSampleDataActivityというクラスでサンプルを提示しています。
package org.sssg.soft.sample.application; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.Window; import android.widget.LinearLayout; import android.widget.TextView; public class SimpleApplicationSampleDataActivity extends Activity { private SampleData data = new SampleData(); @Override public void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); data.putValue(0, "SimpleApplicationSampleDataActivity.data(0)"); data.putValue(1, "SimpleApplicationSampleDataActivity.data(1)"); LinearLayout layout = new LinearLayout(this); layout.setBackgroundColor(Color.WHITE); layout.setOrientation(LinearLayout.VERTICAL); setContentView(layout); TextView textView = new TextView(this); StringBuilder sb = new StringBuilder(); sb.append(data.getValue(0)); sb.append("\n"); sb.append(data.getValue(1)); textView.setText(sb.toString()); textView.setTextSize(16.0f); textView.setTextColor(Color.BLACK); layout.addView(textView); } }
(2)へ続く予定