it-swarm-ru.tech

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

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

Делать

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

В вашем PreferenceActivity, т.е. сделайте его членом вашего PreferenceActivity класса, а затем выполните registerOnSharedPreferenceChangeListener(spChanged) в методе PreferenceActivity.onCreate().

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

Иначе виновата ваша условная проверка в слушателе. Разместите код.

Правка:

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

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

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

59
techiServices

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

}
62
Jonathan