次のように定義されたCheckBoxPreferenceがあります。
<CheckBoxPreference
android:defaultValue="true"
android:key="prefVisible"
android:summary="@string/pref_visible_summary"
android:title="@string/pref_visible" >
</CheckBoxPreference>
私のアプリケーションは、この設定を使用してビューの可視性を制御します。(新しいワイプされたエミュレーターで)アプリケーションを最初に起動したとき、ビューは表示されません。ただし、設定画面(アクティビティ)に移動すると、チェックボックスがオンになっていると表示されます。
これは、defaultValue属性が実際に設定を設定しているのではなく、基になるデータがない場合にチェックボックスの値を設定していることを意味します(まったく新しいインストールの場合のように)。また、これは、ユーザーが設定画面(アクティビティ)に初めて出入りした後にのみ設定が設定されることを意味しますか?それ以外の場合は未定義ですか?
アプリを意図したとおりに機能させるために、次のように、preferencesgetterメソッドのデフォルト値引数に依存していることに注意してください。
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean isVisible = sharedPrefs.getBoolean("prefVisible", true); // default = true
これにより、プリファレンスのデフォルト値を制御する2つの方法がある理由について少し混乱します。Xmlで定義するか、getBooleanメソッドでデフォルト値を提供するかです。