Как определить, были ли внесены изменения в настройках?
У меня есть класс, который расширяет PreferenceActivity и показывает экран предпочтений моего приложения. Можно ли проверить, были ли внесены какие-либо изменения в предпочтения?
Это помогает...
другое родственное сообщение: 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 ответа:
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 } }
из официальных документов:
Читать Предпочтения > прослушивание изменений предпочтений