Заставьте PreferenceActivity
implement
SharedPreferences.OnSharedPreferenceChangeListener
объявить в PreferenceActivity
:
SharedPreferences prefs;
инициализировать в onCreate
:
SharedPreferences sPrefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs = sPrefs;
и зарегистрироваться на общем слушателе изменения предпочтений
prefs.registerOnSharedPreferenceChangeListener(this);
сделать то же, что сказал Стив в методах onResume
и onPause
.
реализация onSharedPreferenceChanged
слушатель:
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Log.d("SettingsActivity","onSharedPreferenceChanged LISTENER FIRED");
if (key.equals(getString(R.string.key_call))) {
//if call true
if (sharedPreferences.getBoolean(getString(R.string.key_call), false)) {
Preference preference = findPreference(getString(R.string.key_record));
preference.setEnabled(false);
} else { // if call false
Preference preference = findPreference(getString(R.string.key_record));
preference.setEnabled(true);
}
}
if (key.equals(getString(R.string.key_record))) {
//if record true
if (sharedPreferences.getBoolean(getString(R.string.key_record), false)) {
Preference preference = findPreference(getString(R.string.key_call));
preference.setEnabled(false);
} else { // if record false
Preference preference = findPreference(getString(R.string.key_call));
preference.setEnabled(true);
}
}
}
В этом случае у меня есть 2 взаимоисключающих предпочтения в PreferenceActivity
.Позвони и запиши.Когда оба флажка сняты, оба могут быть проверены, но когда пользователь проверяет один из них, другой становится отключенным (неактивным).Когда пользователь снимает флажок с установленного предпочтения, он может проверить другое.
От обоих могут зависеть другие предпочтения, которые можно отработать с атрибутом android:dependancy
в файле XML.