SwitchPreference以编程方式创建,setChecked无法正常工作

时间:2017-03-22 12:23:23

标签: android android-support-library android-preferences android-preference-v14

我想

  1. 以编程方式创建SwitchPreference
  2. 在其上设置setChecked(true)
  3. 将其添加到PreferenceGroup
  4. 1和3工作正常,但在3之后未检查SwitchPreference并且点击切换没有效果(无法'打开'/选中)。

    这是我的PreferenceFragment

    public class MyPrefFragment extends PreferenceFragment {
        @Override
        public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) {
    
            addPreferencesFromResource(R.xml.prefs);
    
            PreferenceGroup preferenceGroup = (PreferenceGroup) findPreference("pref_cat_1");
    
            SwitchPreference switchPreference = new SwitchPreference(getActivity());
            switchPreference.setTitle("new");
            switchPreference.setChecked(true);
            switchPreference.setDefaultValue(true);
    
            switchPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                @Override
                public boolean onPreferenceChange(final Preference preference, final Object newValue) {
    
                    Toast.makeText(getActivity(), newValue.toString(), Toast.LENGTH_SHORT).show();
    
                    return false;
                }
            });
    
            preferenceGroup.addPreference(switchPreference);
    
        }
    }
    

    和我的PreferenceScreen

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    
        <PreferenceCategory android:title="cat_one">
    
            <SwitchPreference
                android:key="pref_1"
                android:defaultValue="false"
                android:title="fest"/>
    
        </PreferenceCategory>
    
        <PreferenceCategory
            android:key="pref_cat_1"
            android:title="category"/>
    
    </PreferenceScreen>
    

    如何在以编程方式创建的SwitchPreference上正确setChecked(true)

    测试项目是enter image description here

2 个答案:

答案 0 :(得分:1)

  

未选中 SwitchPreference ,点击切换按钮无效。

在我的机器上检查。关于点击它后的状态你是完全正确的。这是因为您从false回调中返回onPreferenceChange()

onPreferenceChange()的文档:

  

返回: true 以使用新值更新首选项的状态。

所以,我只是将false更改为true,并且按预期工作。

修改

我正在运行API 25平板电脑模拟器。然后在API 22模拟器上运行,它没有工作。这很奇怪,它只能在API 25上运行。

答案 1 :(得分:0)

我在使用 addPreference() 时遇到了同样的问题,但我切换到 preferenceGroup.addItemFromInflater(switchPreference) 并且它运行良好。