Использование прослушивания для изменения предпочтений

После прочтения документации 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) {
         . . .
    }
}
Другие вопросы по тегам