Androidで設定画面を作っていた。
もう、ネットがないとまったく何も作れないレベル・・・。
それはともかく、設定なので、値がある。
これは、SharedPreferenceでよい。
その初期値をどうやって設定すればよいか悩んでいた。
ListPreferenceでやってるのだが、中にandroid:defaultValueを書いておくと、それが初期値になると言うことはわかった。
しかし、設定画面を呼ばずに使うこともあるので、未初期化の値があれば初期値を設定したい。
そんなときは、
PreferenceManager.setDefaultValues(this, R.xml.preference_settings, true);
みたいに書けばよいこともわかった。
何を悩んでいたかというと、defaultValueの設定が文字列だったことだ。
ListPreferenceで画面に見せる値はandroid:entriesで、実際に設定する値はandroid:entryValuesに書いていて、それらは@arrayで指定している。
だけど、defaultValueに設定するのは文字列なので、「@arrayの一番上」みたいな指定ができないようなのだ。
かといって、このXMLの中に直接文字列を書くのも、格好が悪い。
じゃあ、@stringの方に「デフォルト値」みたいな文字列をわざわざ用意するというのも、あまりきれいでない気がした。
もし@arrayの値を書き換えてしまったときに、デフォルト値への反映をし忘れそうな気もする。
ああもう!とやけになって、<string-array>の中に@string形式で書いたら、あら、動くやん。
<string name="felica_key1">xxyyzz</string><string name="felica_key2">112233</string><string name="felica_key3">aabbcc</string><string-array name="felica_master_keys"><item>@string/felica_key1</item><item>@string/felica_key2</item><item>@string/felica_key3</item></string-array>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><PreferenceCategoryandroid:title="@string/settings_category_id"><ListPreferenceandroid:key="pref_master_key"android:entries="@array/settings_master_key"android:entryValues="@array/felica_master_keys"android:defaultValue="@string/felica_key1"android:title="@string/settings_master_key"android:dialogTitle="@string/settings_master_key" /></PreferenceCategory></PreferenceScreen>
いやー、まだまだわかってないですな、私・・・。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。