サイト移転のお知らせ:http://techbooster.org/に移転しました

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

8月 29, 2010   //   by kseto   //   ユーザインターフェース  //  2 Comments

設定画面を簡単に作る」では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);
}

関連する記事:

Sponsored Link

2 Comments

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です