現在作成中のアプリでは、PreferenceActivityを利用しています。
設定した値によって、表示されている項目のサマリーが変更するとステキなので、実装をします。
![]() |
| こういう感じで、設定項目の下に設定値を表示したい。 |
リスナーの設定を
onResume()
で行い、解除を
onPause()
で行なっています。
SharedPreferences.OnSharedPreferenceChangeListener listener; //設定値変更時のリスナーを保存するField
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.preference_activity);
addPreferencesFromResource(R.xml.party_preference);
//省略
listener = setOnChangeLitener();
}
//設定値変更時のリスナークラスの定義
private SharedPreferences.OnSharedPreferenceChangeListener setOnChangeLitener() {
return new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
//コールバックメソッド
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
// TODO Auto-generated method stub
Log.d(TAG, "value is changed");
//全てのPreferenceに実行する
findPreference(key).setSummary(
sharedPreferences.getString(key, ""));
//特定のキーの場合のみ、実行する
if(key.equals(SEARCHBOOKS_KEY))
searchbooksPref.setSummary(
searchbooksMap.get(sharedPreferences.getString(key, ""))); }
}
};
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
//登録
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(listener);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//消去
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(listener);
}

0 件のコメント:
コメントを投稿