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

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

Solutions Collecting From Web of "Как определить, были ли внесены изменения в предпочтения?"

Делать

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

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

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

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