Как определить, были ли внесены изменения в настройках?
У меня есть класс, который расширяет 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
Из официальных документов:
Настройки чтения > Прослушивание изменений предпочтений