【问题标题】:how to turn on SwitchPreference programatically on Android如何在 Android 上以编程方式打开 SwitchPreference
【发布时间】:2019-05-02 04:18:49
【问题描述】:

我有一个设置片段,它加载一个带有默认设置页面的 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();

它确实改变了偏好,但改变没有加载到屏幕上,所以用户不知道

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

【问题讨论】:

    标签: android sharedpreferences android-preferences preferenceactivity android-settings


    【解决方案1】:

    我认为您需要在SharedPreferences 更改时实现一个侦听器。

    SharedPreferences.OnSharedPreferenceChangeListener spChanged = new
                           SharedPreferences.OnSharedPreferenceChangeListener() {
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
        // change the Switch Preference state here
        }
    };
    

    然后当偏好改变时,你可以改变用户的屏幕来匹配它。

    供您参考:

    How to detect if changes were made in the preferences?

    【讨论】:

    • 我的问题并不清楚,我确实得到了正确的事件......我不知道的是如何打开除了单击之外的其他首选项
    【解决方案2】:

    您正在寻找setChecked(),而不是setEnabled()

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

    【讨论】:

    • 偏好类中没有设置检查方法
    • @abinav chauhan 。将首选项转换为 switchpreference 然后您将获得 setchecked 属性
    【解决方案3】:

    您可以使用SwitchPreferenceCompat

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 2021-11-28
      • 2015-10-30
      • 2013-10-31
      • 1970-01-01
      相关资源
      最近更新 更多