我有以下XML。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/preference_xxx_category">
<CheckBoxPreference
android:title="@string/preference_xxx_dual_mode_title"
android:summary="@string/preference_xxx_dual_mode_summary"
android:key="xxxDualModePreference" />
</PreferenceCategory>
</PreferenceScreen>
我使用GUI将其加载为以下代码
public class Preferences extends SherlockPreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
this.getPreferenceManager().findPreference("xxxDualModePreference").setDefaultValue(Utils.isDualCoreDevice());
this.getPreferenceManager().findPreference("xxxDualModePreference").setEnabled(Utils.isDualCoreDevice());
// Once the GUI is shown, I realize my preference UI check box is not being ticked.
默认值应取决于设备CPU核心的数量。这就是为什么我不能指定XML中的默认值。
但是,如果我在Java代码中指定默认值,我会意识到UI没有反映它,尽管这是我第一次启动我的应用程序。
我错过了其他任何步骤吗?
感谢。
答案 0 :(得分:2)
我认为你没有完全理解我在评论中想说的内容,所以我将在下面给出一个例子。正如已经指出的那样:调用setDefaultValue(...)
实际上不会刷新/无效/更新Preference
。
你真正追求的是什么(至少我认为......)不仅设置了“启用”状态,还设置了“已检查”状态。基本上,您希望从首选项中获取该首选项的值,否则使用Utils.isDualCoreDevice()
的结果。这看起来有点像这样:
CheckBoxPreference dualCoreModePref = (CheckBoxPreference) getPreferenceManager().findPreference("xxxDualModePreference");
dualCoreModePref.setEnabled(Utils.isDualCoreDevice());
dualCoreModePref.setChecked(getPreferenceManager().getSharedPreferences().getBoolean(dualCoreModePref.getKey(), Utils.isDualCoreDevice()));
魔术在最后一行:检索首选项的值,并使用实用程序方法的结果作为默认值。在初始启动之后,或者如果用户更改设置,布尔值将添加到首选项中,因此将不再使用默认值。
剩下的就是自己决定是否要在设备是单核的情况下显示复选标记。目前它会。