Как отобразить измененное значение SwitchPreference после нажатия AlertDialog
У меня есть SwitchPreference, который отображает AlertDialog onChange и хотел бы принять / отклонить изменение в зависимости от нажатия кнопки в AlertDialog (положительный / отрицательный).
Если пользователь пытается изменить значение на "истина", изменение должно быть принято, в противном случае должен быть показан AlertDialog и отклонение SwitchPreference. Только если пользователь подтверждает AlertDialog (положительная кнопка), SwitchPreference следует изменять.
Ниже приведена соответствующая часть моего класса Activity, которая расширяет PreferenceActivity. Значения в 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;
}
});
1 ответ
Добавьте этот метод в ваш класс, который содержит вышеупомянутый код.
static void updateUI() {
if(mSharedPreferences.getInt(mSharedPrefKey,0) == 0){
Log.d(TAG,"Shared preference stored 0");
mBtHciSnoopLogServer.setChecked(false);
}
}
А где вы меняете настройку переключателя, вызывайте метод:
mSharedPreferences.edit().putInt(mSharedPrefKey, 0).commit();
YourClass.updateUI();
Поскольку метод является статическим, он хранится в глобальном контенте, поэтому все работает нормально.