私が知る限り、値は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" />
すべてのデフォルトが設定されているわけではない理由は何ですか?