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);
}
}
我目前遇到的问题是在 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);
}
}