プリファレンス
■プリファレンスとは?
設定値の保存。キーと値のペアで保存される。
実態は xmlファイルで /data/data/(パッケージ名)/shared_pref に保存される。
■プリファレンスオブジェクトの取得
SharedPreferences sp = getPreferences(モード);
または
SharedPreferences sp = getSharedPreferences(ファイル名,モード);
getPreferencesは(アクティヴィティ名).xml になる。
モードは以下を指定
| MODE_PRIVATE | このアプリだけで使用可能 |
| MODE_WORLD_READABLE | 他のアプリから読み取り可能 |
| MODE_WORLD_WRITEABLE | 他のアプリから書込み可能 |
■データの保存
保存はプリファレンスオブジェクトからEditorクラスを取得し、 putXXX系(XXXはデータ型)のメソッドでデータを指定した後、commitメソッドで保存する。
SharedPreferences sp = getPreferences(MODE_PRIVATE);
Editor editor = sp.edit();
editor.putString("test", str); // キー、値
editor.commit();
putString、putBoolean、putFloat、putInt、putLong が使用できる。
■データの読み込み
読み込みはプリファレンスオブジェクトのgetXXX系(XXXはデータ型)のメソッドでキーを指定する。
SharedPreferences sp = getSharedPreferences("pref",MODE_PRIVATE);
String str = sp.getString("test", ""); // キー、デフォールト値
■Preference用のActivity
設定保存用のActivity。まずはxmlを作成。
[File]-[New]-[Other]で「Android」の「Android XML File」から「ResourceType」を「Preference」にする。
「RootElement」は「PreferenceScreen」を選択していることを確認し、ファイル名は「pref.xml」などを入力
「finish」を推すことで/res/xml にファイルが作られる。
Activityを新たに追加(例:PrefActivity)。その中でPreferenceFragmentを継承したクラスを作りxmlを読み込む。そのFragmentを画面に設定する。
public class PrefActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_pref);
getFragmentManager()
.beginTransaction()
.replace(android.R.id.content,new PrefFragment())
.commit();
}
public static class PrefFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref);
}
}
}
他クラスでデータの読み込み
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
String uname = sp.getString("user_name", "");
xmlの属性
| android:summary | 説明文 |
| android:dialogTitle | ダイアログタイトル |
| android:inputType | 入力形式(例:number) |
| android:defaultValue | 初期値 |
そのほかのタグ
カテゴリ
PreferenceCategory タグで囲む。android:title属性にタイトル入力。チェックボックス
CheckBoxPreference。android:defaultValueを trueにすることでチェック済みに。
リストボックス
ListPreference
pref.xml内
| android:entries | 選択肢として表示される文字列の配列。例:@array/list_entries |
| android:entryValues | 選択肢を選んだとき保存される文字列の配列。例:@array/list_values |
strings.xml内の例
インテントの利用
変更時のリスナー設定
CheckBoxPreference cbp = (CheckBoxPreference)findPreference("user_check"); // キー名で取得
cbp.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String summary;
if ((Boolean)newValue) {
summary = "チェック済み";
} else {
summary = "未チェック";
}
preference.setSummary(summary);
return true; // 更新の適用
}
});
Android開発 虎の巻