Как определить, были ли внесены изменения в настройках?


У меня есть класс, который расширяет PreferenceActivity и показывает экран предпочтений моего приложения. Можно ли проверить, были ли внесены какие-либо изменения в предпочтения?

Это помогает...

http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html

другое родственное сообщение: SharedPreferences.onSharedPreferenceChangeListener не называется последовательно


public class PreferenceClass extends PreferenceActivity {

    OnSharedPreferenceChangeListener listener;

    public void onCreate(Bundle savedInstanceState) {
        SharedPreferences prefs = this.getSharedPreferences("settings", 0);
        listener = new SharedPreferences.OnSharedPreferenceChangeListener() {

            public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
                int flag = 1;
            }
        };
        prefs.registerOnSharedPreferenceChangeListener(listener);
        super.onCreate(null);
        addPreferencesFromResource(R.xml.settings);
    }
}
3 63

3 ответа:

Do

SharedPreferences.OnSharedPreferenceChangeListener spChanged = new
                           SharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
        // your stuff here
    }
};

в своем PreferenceActivity, т. е. сделать ее членом вашей PreferenceActivity класс, а затем сделать registerOnSharedPreferenceChangeListener(spChanged) на PreferenceActivity.onCreate() метод.

это то, что я делаю, и у меня никогда не было проблем.

иначе это ваша условная проверка в слушателе, который виноват. Опубликуйте код.

EDIT:

из кода, который вы разместили, вы должны сделать prefs переменная-член класса, поэтому она имеет глобальную область видимости.

и prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); вместо getSharedPreferences потому что вы не создали этот файл.

для создания файла вам нужно использовать PreferenceManager. Чтобы получить PreferenceManager используйте Activity.getPreferenceManager().

в своем PreferenceActivity класс, реализовать SharedPreferences.OnSharedPreferenceChangeListener интерфейс. Добавьте необходимое onSharedPreferenceChanged метод для вашего класса и зарегистрировать его в onCreate.

посмотреть пример кода здесь:

public class MyPreferences extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.fw_preferences); //deprecated
        PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        // handle the preference change here
    }

}

из официальных документов:

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