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

У меня есть класс, который расширяет 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);
    }
}

Ответ 1

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().

Ответ 2

В вашем классе 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
    }

}

Ответ 3

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

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