2014/09/07

[android]<string>の中に@stringが書けるんだ

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">
    <PreferenceCategory
        android:title="@string/settings_category_id">
        <ListPreference
            android: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 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。