2

我有以下 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 没有反映它,尽管这是我第一次启动我的应用程序。

还有其他我错过的步骤吗?

谢谢。

4

1 回答 1

2

我认为您并没有完全理解我在评论中想说的话,所以我将在下面举一个例子。正如已经指出的那样:调用setDefaultValue(...)实际上不会刷新/无效/更新Preference.

您真正追求的(至少我认为......)不仅设置“启用”状态,还设置“检查”状态。基本上,您想从首选项中获取该首选项的值,或者使用其他结果Utils.isDualCoreDevice()。这看起来有点像这样:

CheckBoxPreference dualCoreModePref = (CheckBoxPreference) getPreferenceManager().findPreference("xxxDualModePreference");
dualCoreModePref.setEnabled(Utils.isDualCoreDevice());
dualCoreModePref.setChecked(getPreferenceManager().getSharedPreferences().getBoolean(dualCoreModePref.getKey(), Utils.isDualCoreDevice()));

魔术在最后一行:检索首选项的值并使用实用程序方法的结果作为默认值。在初始启动后,或者如果用户更改设置,布尔值将被添加到首选项中,因此将不再使用默认值。

剩下的就是自己决定如果设备是单核的,是否要显示复选标记。目前会。

于 2012-05-30T10:59:16.977 回答