我有一个 SwitchPreference 显示 AlertDialog onChange 并希望根据在 AlertDialog 中单击的按钮(正/负)来接受/拒绝更改。
如果用户尝试将值更改为“true”,则应接受更改,否则应显示 AlertDialog 并拒绝 SwitchPreference 更改。只有当用户确认 AlertDialog(肯定按钮)时,才应更改 SwitchPreference。
下面是扩展 PreferenceActivity 的我的 Activity 类的相关部分。SharedPreferences 中的值实际上已按预期更新,只是 SwitchPreference 没有明显更改(开关保持选中状态)-我必须重新打开 SettingsActivity 才能看到更改(未选中开关)。
final SwitchPreference passwordEnabled = (SwitchPreference) findPreference(PASSWORD_ENABLED);
passwordEnabled.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(final Preference preference, Object newValue) {
final Context c = getActivity();
if ((boolean) newValue) {
return true;
}
new AlertDialog.Builder(c)
// omitting non-relevant code
.setPositiveButton(getString(R.string.confirm), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
((SwitchPreference) preference).setChecked(false);
preference
.getEditor()
.putBoolean(PASSWORD_ENABLED, false)
.commit();
preference.setSummary(R.string.disabled);
}
})
.setNegativeButton(getString(R.string.cancel), null)
.create().show();
return false;
}
});