【问题标题】:How to show changed SwitchPreference value after AlertDialog click单击 AlertDialog 后如何显示更改的 SwitchPreference 值
【发布时间】:2015-06-03 01:08:07
【问题描述】:

我有一个 SwitchPreference 显示 AlertDialog onChange 并希望根据在 AlertDialog 中单击的按钮(正/负)接受/拒绝更改。

如果用户尝试将值更改为“true”,则应接受更改,否则应显示 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;
    }
});

【问题讨论】:

    标签: android android-alertdialog android-preferences switchpreference


    【解决方案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();
    

    由于该方法是静态的,因此它存储在全局内容中,因此一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多