让你的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);
}
}
}
在这种情况下,我在 PreferenceActivity 中有 2 个互斥的首选项。
通话和录音。
当两者都未选中时,都可以选中,但当用户选中其中一个时,另一个会被禁用(灰显)。
当用户取消选中选中的首选项时,用户可以选中另一个。
其他首选项可以依赖于它们,这可以通过 XML 文件中的android:dependancy 属性来解决。