Android checkboxpreference 被禁用,即使它在 XML 中启用

Android checkboxpreference disabled even though it's enabled in XML

我目前遇到的问题是在 preference.xml 中启用了禁用的复选框首选项。这发生在迁移到 Metarial 设计之后。我尝试以编程方式启用视图,但没有帮助。

(我想显示截图,但我的代表还不够高:/)

我的preference.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <PreferenceCategory android:title="Network Service" >

        <CheckBoxPreference
            android:enabled="true"
            android:key="@string/communication_option"
            android:selectable="true"
            android:defaultValue="true"
            android:shouldDisableView="false"
            android:summary="Allows down- and upload."
            android:title="Enable server communication" />

        <CheckBoxPreference
            android:disableDependentsState="false"
            android:enabled="true"
            android:dependency="@string/communication_option"
            android:key="@string/wifi_sync_option"
            android:selectable="true"
            android:defaultValue="true"
            android:shouldDisableView="true"
            android:summary="Do not use mobile bandwidth to download"
            android:title="WiFi synchronization only" />

    </PreferenceCategory>
</PreferenceScreen>

我的偏好片段

public class FragmentPreference extends PreferenceFragment implements
    SharedPreferences.OnSharedPreferenceChangeListener {


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.preferences);

    // added to make sure it really is enabled
    CheckBoxPreference cbp = (CheckBoxPreference) getPreferenceManager()
            .findPreference(getString(R.string.communication_option));
    cbp.setEnabled(true);
    cbp.setShouldDisableView(false);

}

我正在使用 Theme.AppCompat.Light.NoActionBar 主题以便能够添加新的工具栏。

我注意到的另一件事是,如果屏幕方向变为横向,则首选项显示为启用,即使首选项显示为禁用,首选项仍然可以 clicked/checked/unchecked.

您必须在主 activity 的 onCreate 中设置默认值。

PreferenceManager.setDefaultValues(this, R.xml.pref_general, false);

经过几次尝试和错误后,我发现我只是超载了首选项。 更简洁、更简洁的版本如下所示:

<PreferenceCategory android:title="Network Service" >

    <CheckBoxPreference
        android:key="@string/communication_option"
        android:defaultValue="true"
        android:summary="Allows down- and upload."
        android:title="Enable server communication" />

    <CheckBoxPreference
        android:dependency="communication_option"
        android:key="@string/wifi_sync_option"
        android:defaultValue="true"
        android:summary="Do not use mobile bandwidth to download"
        android:title="WiFi synchronization only" />

</PreferenceCategory>

public class FragmentPreference extends PreferenceFragment implements
            SharedPreferences.OnSharedPreferenceChangeListener {     

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            // Load the preferences from an XML resource
            addPreferencesFromResource(R.xml.preferences);
        }
}