我目前遇到了在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>
my preferenceFragment
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主题来添加新工具栏。
我注意到的另一件事是,首选项显示为启用它,屏幕方向更改为横向,即使首选项显示为已禁用,仍可以单击/选中/取消选中首选项。
答案 0 :(得分:2)
经过一些试验和错误后,我发现我刚刚超载了偏好设置。 更纤薄,更清洁的版本看起来像这样:
<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);
}
}
答案 1 :(得分:0)
您必须在主要活动的onCreate中设置默认值。
PreferenceManager.setDefaultValues(this, R.xml.pref_general, false);