Использование прослушивания для изменения предпочтений
После прочтения документации Android о настройках, у меня есть несколько вопросов о прослушивании для изменения предпочтений
"Есть несколько причин, по которым вы можете захотеть получить уведомление, как только пользователь изменит одно из предпочтений. Чтобы получить обратный вызов, когда изменение происходит с любым из предпочтений, реализуйте интерфейс SharedPreference.OnSharedPreferenceChangeListener и зарегистрируйте прослушиватель для объект SharedPreferences путем вызова registerOnSharedPreferenceChangeListener()."
Я действительно не понимаю, и я не мог найти, почему важно реализовать этот слушатель, в чем его польза? Что это делает? когда его использовать? прямо сейчас, без реализации слушателя, мои настройки работают нормально, это важно для каких-либо настроек или только в определенных случаях? Благодарю.
ресурс: http://developer.android.com/guide/topics/ui/settings.html
1 ответ
Вы не обязаны реализовывать OnSharedPreferenceChangeListener
, Это возможность для удобства.
Иногда вы хотите немедленно отреагировать на изменение предпочтений. Например, если у вас есть действие "Настройки", где пользователь может, скажем, изменить цвет фона действия, тогда, когда пользователь делает выбор, вы хотите, чтобы цвет фона изменился немедленно, а не при перезапуске пользователя. активность. Один из способов сделать это - проверить активность фоновых настроек в onResume()
, но другой способ для активности, чтобы зарегистрировать OnSharedPreferenceChangeListener
в onStart
и (отмените регистрацию в onStop
). Я обнаружил, что использование слушателя таким способом иногда может привести к упрощению кода. Это также очень помогает, когда код, который должен реагировать на изменение настроек, обычно не участвует в методах жизненного цикла платформы.
Реализация OnSharedPreferenceChangeListener
это довольно просто. Вам просто нужно либо объявить свой класс implements OnSharedPreferenceChangeListener
или реализовать объект, который делает. Например:
public class MyActivity extends Activity {
. . .
private final OnSharedPreferenceChangeListener mPrefsListener =
new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key)
{
if (key.equals(IMPORTANT_PREF_KEY)) {
setImportantValue(sharedPrefs.getInt(IMPORTANT_PREF_KEY, -1));
}
}
};
@Override
protected void onStart() {
super.onStart();
PreferenceManager.getDefaultSharedPreferences(this)
.registerOnSharedPreferenceChangeListener(mPrefsListener);
}
@Override
protected void onStop() {
super.onStop();
PreferenceManager.getDefaultSharedPreferences(this)
.unregisterOnSharedPreferenceChangeListener(mPrefsListener);
}
void setImportantValue(int value) {
. . .
}
}