我想要


以编程方式创建SwitchPreference
在其上设置setChecked(true)
将其添加到PreferenceGroup


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)

测试项目为on Github

最佳答案

未选中SwitchPreference,并且单击切换按钮无效。


它已在我的机器上检查。关于状态单击后,您是完全正确的。那是因为您要从false回调返回onPreferenceChange()

onPreferenceChange()的文档:


  返回:true,以新值更新Preference的状态。


因此,我只将false更改为true,它可以按预期工作。

编辑

我正在运行API 25平板电脑模拟器。然后在API 22仿真器上运行,但没有成功。很奇怪,它只能按预期在API 25上运行。

08-18 19:59