Как определить, были ли внесены изменения в настройки? - PullRequest
68 голосов
/ 15 февраля 2011

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

Ответы [ 2 ]

62 голосов
/ 04 июля 2012

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

}
60 голосов
/ 15 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...