値が summary に出るとユーザーフレンドリーですよね。
summary というのは、PreferenceActivity の設定画面で、
設定項目の下に少し小さい文字で表示される領域です。
Libraroid の設定画面だと、「和書」「キーワード」
「キーワードに関連」などのが表示されるところが summary です。

選択された値によって、この summary に表示される
文字を変更するにはこんな感じで実装します。
PreferenceActivity で
- Preference searchbooksPref;
- final static String SEARCHBOOKS_KEY = "searchbooks";
- Map<String, String> searchbooksMap = new HashMap<String, String>();
- @Override void onCreate() {
- // 省略
- String[] searchbooksKeys = getResources().getStringArray(R.array.search_books);
- String[] searchbooksValues = getResources().getStringArray(R.array.search_books_value);
- for(int i = 0; i < searchbooksKeys.length; i++)
- searchbooksMap.put(searchbooksValues[i], searchbooksKeys[i]);
- searchbooksPref = findPreference(SEARCHBOOKS_KEY);
- // 省略
- }
- @Override
- protected void onResume() {
- super.onResume();
- getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(listener);
- }
- @Override
- protected void onPause() {
- super.onPause();
- getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(listener);
- }
- // ここで summary を動的に変更
- private SharedPreferences.OnSharedPreferenceChangeListener listener =
- new SharedPreferences.OnSharedPreferenceChangeListener() {
- public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
- if(key.equals(SEARCHBOOKS_KEY))
- searchbooksPref.setSummary(searchbooksMap.get(sharedPreferences.getString(key, "Books")));
- }
- };
SharedPreferences.OnSharedPreferenceChangeListener を定義して、preference の設定値が変更されたときの処理を実装します。
このリスナーを onResume() と onPause() でレジスト/アンレジストします。
設定値が変更されたときに、どの preference が変更されたかは、onSharedPreferenceChanged の引数の key に入ってます。
ここでは、設定値が複数の項目から選択する場合(リスト)の実装です。
# 選択項目の表示 array と値 array がarray-string で resource に定義してあります。
たとえば、単に preference の設定値を表示するだけの場合は(uid を表示するとか)こんな感じでOKです。
- private SharedPreferences.OnSharedPreferenceChangeListener listener =
- new SharedPreferences.OnSharedPreferenceChangeListener() {
- public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
- findPreference(key).setSummary(sharedPreferences.getString(key, "00000000"));
- }
- };
0 件のコメント:
コメントを投稿