首页 > 解决方案 > 如何在 Android 上以编程方式打开 SwitchPreference

问题描述

我有一个设置片段,它加载一个带有默认设置页面的 xml,我还向一个特定的首选项添加了一个单击侦听器

   @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // Load the preferences from an XML resource
            addPreferencesFromResource(R.xml.settings);
       preferences.findPreference(getString(R.string.pref_custom_list)).setOnPreferenceChangeListener(this);
//other stuff.....

这很好用,当用户单击触发事件时,我可以检查有关开关的一些信息,包括拒绝更改...

但是即使发生这种情况,我也想在同一屏幕上打开/关闭其他开关

我尝试过了

   preferences.findPreference(getString(R.string.xpto)).setEnabled(true);

但它不会打开或关闭任何开关......它只是将视图设置为启用或禁用点击

如果我做类似的事情 PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("xpto",true).apply();

它确实更改了首选项,但更改未加载到屏幕上,因此用户不知道

如何以编程方式打开或关闭某些首选项并使其反映到首选项屏幕

标签: androidsharedpreferencesandroid-preferencespreferenceactivityandroid-settings

解决方案


您可以使用SwitchPreferenceCompat.

<SwitchPreferenceCompat
    app:key="key"
    app:title="Some Confs" />

如果您SwitchPreferenceCompat按上述方式使用,请在您的片段中尝试此操作。

SwitchPreferenceCompat switchPref = findPreference("key");
switchPref.setChecked(true);

推荐阅读