お父さん勝手に日記見ないでよ!

日記ではないです。

ListPreferenceのSummeryの動的変更

お久しぶりです。長く間が開いてしまいました。
現在androidの勉強をしている最中です。その中で出来たことを備忘録的に記録。

androidのActivityのひとつ、PreferenceActivityでListPreferenceを使っているケースについて。

事の発端は「ListActivityで設定をしても、何設定したかが判りにくいなぁ…サマリーに表示できないかなー。」ということから。

以下具体的な実装

public class OptionActivity extends PreferenceActivity
  implements OnPreferenceChange{
  
  ListPreference lPref = null;
  
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.pref);
    CharSequence cs = getText(R.string.key);
    lPref = (ListPreference)findPreference(cs);
    lPref.setOnPreferenceChangeListener(this);
  }
  
  /** 中略 */
  
  @Override
  public boolean onPreferenceChange(Preference preference,
                  Object newValue) {
    // TODO Auto-generated method stub
    if(newValue != null){
      preference.setSummary((CharSequence)newValue);
      return true;
    }
    return false;
  }

}


目的のListPreferenceで設定した属性android:keyをCharSequenceにキャストしてfindPreferenceでインスタンス取得。このインスタンスで目的のListPreferenceをハンドルできるようになる。
OnPreferenceChangeListenerインタフェイスを実装して。
setOnPreferenceChangeListenerでListPreference実装したインタフェイスをセット

OnPreferenceChangeは設定値が変更されたときに用いられるリスナーです。