web-dev-qa-db-ja.com

メインアクティビティでXMLから設定を初期化する

私の問題は、アプリケーションを起動したときにユーザーが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値になります。

50
pixel

メインActivityonCreate()PreferenceManager.setDefaultValues()メソッド を呼び出します。

PreferenceManager.setDefaultValues(this, R.xml.preference, false);

これにより、preference.xmlファイルを作成し、そこに定義されているデフォルト値を設定します。 readAgain引数をfalseに設定すると、このメソッドが過去に呼び出されたことがない場合にのみデフォルト値が設定されるため、毎回ユーザーの設定をオーバーライドする必要はありません。 Activityが作成されます。

107
Dave Webb

簡単に説明します。 :)

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));
14
yanchenko

getString()への呼び出しには、2番目のパラメーターとしてnullがあります。これを希望するデフォルト値に変更します。

8
CommonsWare