10

アプリに Listpreferences があります。インストール直後にデフォルトに設定されているようには見えません - それらはnullのようです。インストール直後にデフォルト設定が設定されない理由を突き止めようとしています。私のメインコードには次のものがあります。

      SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);

      InUnits = sp.getString("List1", "defValue");
       InAngs = sp.getString("List2", "defValue");
       OutUnits = sp.getString("List3", "defValue");
       OutAngs = sp.getString("List4", "defValue");

上記のコードを実行した直後、各変数には、以下の ListPreference で割り当てた実際の値ではなく、「defValue」が含まれます。

私の設定xmlファイルは「settings.xml」と呼ばれています。そこにある ListPreferences の 1 つが次のようになります。

       <ListPreference
       android:key="List1"
       android:title="Input: Alph"
       android:summary="Choose Alph or Ralph"
       android:entries="@array/inputAlph"
       android:entryValues="@array/input_Alph_codes"
       android:dialogTitle="Input Alph"
       android:defaultValue="ININ"/>           

私のstrings.xmlファイルの一部は次のようになります。

<string-array name="inputUnits">
    <item>Alph</item>
    <item>Ralph</item>  
    </string-array>   
    <string-array name="input_Alph_codes">
    <item>ININ</item>
    <item>INMM</item>
    </string-array>

メニューに移動してから設定すると、デフォルトがチェックされている(ラジオボタン付き)ことがわかります。その後、設定メニューからメイン画面に戻ると、すべて順調です。...次に、上記の各変数に適切なデフォルト値が割り当てられます。

これは、最初にアプリを電話にインストールしたときにのみ発生します。設定画面に一度行ってからすぐに出た後、アプリは問題なく、設定の変更を受け入れます。

ちなみに、ご覧のとおり、「List1」は、私の res/xml フォルダーにある settings.xml というファイル内の android:key です。

4

3 に答える 3

22

インストール直後にデフォルトに設定されているようには見えません - それらはnullのようです。

それが起こるはずです。

インストール直後にデフォルト設定が設定されない理由を突き止めようとしています。

彼らはそうあるべきではありません。そこにリストした設定 XML は、 を設定するためだけに使用されPreferenceActivity、それ以上のものではありません。ユーザーが を開くまで、PreferenceActivity設定は null になり、SharedPreferencesgetter に指定したデフォルトが返されます。


アップデート

setDefaultValues()onを使用しPreferenceManagerて、設定 XML のデフォルトを に割り当てることができますSharedPreferences。ただし、タイミングに注意してください。これはディスク I/O を行うため、理想的にはバックグラウンド スレッドで実行されます。

于 2010-05-01T21:09:41.353 に答える
10

設定 XML からデフォルト値を SharedPreferences に設定します。

PreferenceManager.setDefaultValues(Context context, int resourceId, boolean readAgain)

PreferenceManager.setDefaultValues

于 2011-12-29T15:13:11.650 に答える
-3

このようにデフォルト値を指定できます

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
pref.getString("thePrefKey", "theDefaultValue");

「layout」settings.xmlのandroid:defaultValue = "..."は、ユーザーの視覚的なヘルプにすぎません。

于 2011-05-19T19:29:12.697 に答える