Я пытаюсь добавить настройку в свое приложение. Я добавил новую настройку, но я не уверен, где положить OnSharedPreferenceChangeListener
. Я положил его в действие и добавил Log.d()
, но Log.d()
никогда не срабатывает. Есть идеи?Лучшее место для размещения onSharedPreferenceChangeListener
ответ
Вам необходимо зарегистрировать своего слушателя, вызвав setOnPreferenceChangeListener
. Я собираюсь предположить, что у вас есть класс Activity, который расширяет PreferenceActivity. Если это так, это лучшее место для слушателя. Вы бы написать что-то вроде этого:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
Preference myPreference = findPreference("my_pref");
myPreference.setOnPreferenceChangeListener(this);
}
Вопрос был о 'OnSharedPreferenceChangeListener' - также см. [Здесь] (http://stackoverflow.com/questions/15604536/android-where-should-a-onsharedpreferencechangelistener-be-defined-registered) –
А, моя ошибка. – twaddington
Лучшее место по Android Settings doc будет:
@Override
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
И вы должны хранить слушателя в переменном поле (или использовать сам объект активности - в приведенном выше исходном коде), чтобы он не собирал мусор.
I.e. объект анонимного класса не может использоваться как OnSharedPreferenceChangeListener
.
Это должен быть правильный ответ. Например, в родительской активности, в которой размещается ваш PreferenceFragment, в onCreate можно вызвать метод, например initSharedPrefsListener(). Этот метод присваивал бы «new onSharedPreferenceChangeListener()» членной переменной, mListener. Методы регистрации/отмены регистрации называются упомянутыми выше. – Futureproof
Это будет зависеть от того, где вы обновляете свои 'SharedPreferences'. Если они обновляются в рамках одной и той же «Деятельности», которая реализует слушателя, тогда она должна работать. Если «Активность», которая реализует слушатель, в настоящий момент не запущена, или если она «скрыта» (приостановлена / остановлена и т. Д.), То она не будет. Если это должно работать через «Деятельности» или «Службы» и т. Д., Тогда было бы лучше расширить класс «Приложение» и внедрить его. – Squonk