1

私が知る限り、値はSharedPreferences明示的にアクセスされるまで Android に保存されません。つまり、XML ではデフォルト値を持つ場合がありますがSharedPreferences、アクセサー メソッドが呼び出されるまで値はストアに配置されません。これが、すべてのアクセサーに「デフォルト」パラメーターが含まれている理由です。

これは設定ストアから単純に値を取得するだけでは大したことではありませんが、XML で保存されている場合でも、アプリケーションで使用されるすべての設定キーを取得しようとする試みを防ぎます。SharedPreferences#getAll()設定が明示的にアクセスされていない限り、 が呼び出されたときにキーは表示されません。

XML で定義されたすべての設定を強制的にSharedPreferencesストアに保存する方法はありますか? 私が見つけることができる最も近い解決策は、設定 XML ファイルを手動で解析し、すべてのキーとデフォルトを見つけて、それぞれのデフォルト値を保存することです。よりクリーンなアプローチはありますか?

アップデート

これをさらに詳しく調べた後、別の理由で設定の部分的なリストを取得しています。デフォルトが設定されている場合、EditTextPreferenceとのListPreference値のみが保存されます。他の 2 つのカスタム設定とCheckBoxPreferenceは完全に無視されます。CheckBoxPreference無視される の例を次に示します。

<CheckBoxPreference
    android:defaultValue="false"
    android:key="PREF_NAME"
    android:summary="Summary text"
    android:title="Title" />

すべてのデフォルトが設定されているわけではない理由は何ですか?

4

2 に答える 2

2

使用できますPreferenceManager::setDefaultValues。たとえば、あなたのApplication::onCreate方法で。

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

最後の引数が の場合false、このメソッドが過去に一度も呼び出されていない場合にのみ、デフォルト値が設定されます。

于 2012-05-22T19:00:49.787 に答える
0

私の場合、設定が欠落している理由は、実際にはAndroidのバグでした。回避策は、重複する質問に示されているように、欠落している設定を手動でデフォルト値に設定することでした:AndroidCheckBoxPreferenceデフォルト値

于 2012-05-22T20:28:50.397 に答える