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 に答える