X

PreferenceのSummaryに現在の設定情報を表示する

設定画面を簡単に作る」ではPreferenceを使って設定画面を作成する方法を紹介しました。
Preferenceには各Preferenceの補足情報を表示するSummaryと呼ばれる領域がありますが、
このSummaryに現在設定されている情報が表示されるととても便利です。

というわけで今回はSummaryに現在の設定情報を表示する方法を紹介したいと思います。

Summaryの表示を変更するには、
目的のPreferenceオブジェクトを取得しsetSummaryを使って表示したい文字列を設定します。

CheckBoxPreferenceの場合


CheckboxPreferenceの場合は以下のようにします。

CheckBoxPreference checkbox_preference = (CheckBoxPreference)getPreferenceScreen().findPreference("checkbox_preference");
if (checkbox_preference.isChecked()) {
	checkbox_preference.setSummary("ture");
} else {
	checkbox_preference.setSummary("false");
}

isCheckedメソッドによってcheckboxPreferenceの状態がBoolean値で取得できます。
取得した値によって表示文字列を変更します。

EditTextPreferenceの場合

EditTextPreferenceの場合はgetTextメソッドによってEditTextPreferenceの設定値を取得し、
setSummaryでその値を設定します。

EditTextPreference edittext_preference = (EditTextPreference)getPreferenceScreen().findPreference("edittext_preference");
edittext_preference.setSummary(edittext_preference.getText());

ListPreferenceの場合

ListPreferenceの場合はgetValueメソッドを使って設定値を取得し、setSummaryでその値を設定します。

ListPreference list_preference = (ListPreference)getPreferenceScreen().findPreference("list_preference");
list_preference.setSummary(list_preference.getValue());

設定値が変更されたときにSummaryを変更する

上記の処理をonCreate関数などに実装すれば起動時の設定情報をSummaryに表示することができます。
しかしこれではアプリが起動中に設定値が変更された場合は新しく設定した値がSummaryには反映されません。
設定値が変更されたときをトリガにしてSummaryを変更するにはonSharedPreferenceChangedというコールバック関数を使います。

具体的には以下のようにします。

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,	String key) {
CheckBoxPreference checkbox_preference = (CheckBoxPreference)getPreferenceScreen().findPreference("checkbox_preference");
if (checkbox_preference.isChecked()) {
	checkbox_preference.setSummary("ture");
} else {
	checkbox_preference.setSummary("false");
}

EditTextPreference edittext_preference = (EditTextPreference)getPreferenceScreen().findPreference("edittext_preference");
edittext_preference.setSummary(edittext_preference.getText());

ListPreference list_preference = (ListPreference)getPreferenceScreen().findPreference("list_preference");
list_preference.setSummary(list_preference.getValue());
}

最後にこのonSharedPreferenceChangedコールバック関数を登録します。
onSharedPreferenceChangedの登録はregisterOnSharedPreferenceChangeListener関数を使い、
登録の解除はunregisterOnSharedPreferenceChangeListenerを使います。
それぞれonResume()、onPause()で行えば良いでしょう。

@Override
protected void onResume() {
    super.onResume();
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
    super.onPause();
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
kseto: