私の問題は、アプリケーションを起動したときにユーザーがPreferenceActivity
を開かなかったため、それらを取得するときに、preference.xmlファイルで定義されたデフォルト値が取得されないことです。
preference.xmlファイル:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:key="applicationPreference" Android:title="@string/config"
>
<ListPreference
Android:key="pref1"
Android:defaultValue="default"
Android:title="Title"
Android:summary="Summary"
Android:entries="@array/entry_names"
Android:entryValues="@array/entry_values"
Android:dialogTitle="@string/dialog_title"
/>
</PreferenceScreen>
メインアクティビティのスニペット(onCreate
メソッド):
SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);
String pref1 = appPreferences.getString("pref1", null);
結果として、null
値になります。
メインActivity
のonCreate()
で PreferenceManager.setDefaultValues()
メソッド を呼び出します。
PreferenceManager.setDefaultValues(this, R.xml.preference, false);
これにより、preference.xml
ファイルを作成し、そこに定義されているデフォルト値を設定します。 readAgain
引数をfalse
に設定すると、このメソッドが過去に呼び出されたことがない場合にのみデフォルト値が設定されるため、毎回ユーザーの設定をオーバーライドする必要はありません。 Activity
が作成されます。
簡単に説明します。 :)
strings.xml(実際にはprefs.xmlが優先されます):
<string name="pref_mypref_key">mypref</string>
<string name="pref_mypref_default">blah</string>
preferences.xml:
Android:key="@string/pref_mypref_key"
Android:defaultValue="@string/pref_mypref_default"
MyActivity.Java:
String myprefVal = prefs.getString(getString(R.string.pref_mypref_key), getString(R.string.pref_mypref_default));
getString()
への呼び出しには、2番目のパラメーターとしてnull
があります。これを希望するデフォルト値に変更します。