В настоящее время у меня есть служба, которая загружает настройки при запуске, сохраняет их как поля, а затем регистрирует OnSharedPreferenceChangeListener
для обновления полей при изменении предпочтений. В настоящее время мой код выглядит следующим образом:Избегайте дублирования кода в OnSharedPreferenceChangeListener
public class MyService extends Service {
private int _prefA;
private boolean _prefB;
private String _prefC;
private boolean _prefD;
private SharedPreferences _preferences;
private SharedPreferences.OnSharedPreferenceChangeListener _prefChangeListener;
@Override
public void onCreate() {
super.onCreate();
_preferences = PreferenceManager.getDefaultSharedPreferences(this);
_prefA = Integer.parseInt(_preferences.getString(PREF_A_KEY, "0"));
_prefB = _preferences.getBoolean(PREF_B_KEY, false);
_prefC = _preferences.getString(PREF_C_KEY, null);
_prefD = _preferences.getBoolean(PREF_D_KEY, false);
_prefChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(PREF_A_KEY)) {
_prefA = Integer.parseInt(sharedPreferences.getString(key, "0"));
} else if (key.equals(PREF_B_KEY)) {
_prefB = sharedPreferences.getBoolean(key, false);
} else if (key.equals(PREF_C_KEY)) {
_prefC = sharedPreferences.getString(key, null);
} else if (key.equals(PREF_D_KEY)) {
_prefD = sharedPreferences.getBoolean(key, false);
}
}
};
_preferences.registerOnSharedPreferenceChangeListener(_prefChangeListener);
}
}
Он работает, как ожидалось, но добавление большего предпочтения становится утомительным, так как я должен обновить код в обоих onCreate()
и OnSharedPreferenceChangeListener
. Есть ли способ изменить это, чтобы код для загрузки предпочтений нужно было написать только один раз?
хороший вопрос, делаю так же глупо)) – Mixaz
Не понимаю, как это можно улучшить. Может быть создан объект-оболочка для настроек, инкапсулирующих значения по умолчанию, наиболее раздражающие части кода. Другая часть в порядке, поскольку переменная инициализация и отслеживание изменений - это разные вещи. Класс wrapper может иметь такие методы, как getPreferenceAKey(), getPreferenceBKey() и т. Д. – Mixaz