Androidはワンツーパンチ 三歩進んで二歩下がる

プログラミングやどうでもいい話

AndroidでListPreferenceを使う時にsummaryに選択された項目を自動で表示する方法

AndroidでPreferenceScreenを定義してListPreferenceを使う時にsummaryに選択された項目を自動で表示する方法を調べていて、これ面白いなーと思ったのでメモしておきます。

下記のようにListPreferenceのandroid:summary="%s"と指定しておきます。
そうしますと現在のプリファレンスの値に対応したentriesに指定した文字列を配列の中から表示してくれます。
注意点としては、プリファレンスにまだ値が何もセットされていない時は画面に"%s"とそのまま表示されてしまいます。
これを防ぐためPreferenceFragment継承クラスなどでプリファレンスに初期値を設定しておく必要があります。

res/xml/preferences.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    <PreferenceCategory android:title="@string/setting_sound1">
        <CheckBoxPreference
            android:defaultValue="true"
            android:key="@string/PREF_SOUND_ON"
            android:title="@string/setting_sound_on_title" />
        <ListPreference
            android:defaultValue="0"
            android:dependency="@string/PREF_SOUND_ON"
            android:dialogIcon="@drawable/ic_launcher"
            android:dialogTitle="@string/please_choose"
            android:entries="@array/setting_sound"
            android:entryValues="@array/setting_sound_value"
            android:key="@string/PREF_SOUND"
            android:summary="%s"
            android:title="@string/setting_sound1" />
    </PreferenceCategory>
</PreferenceScreen>

android:entriesとandroid:entryValuesに指定した値
res/values/string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">

    <!-- setting -->
    <string-array name="setting_sound">
        <item>bird voice1</item>
        <item>bird voice2</item>
        <item>bird voice3</item>
        <item>bird voice4</item>
        <item>bird voice5</item>
    </string-array>
    <string-array name="setting_sound_value">
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
        <item>5</item>
    </string-array>
</resources>

この情報はこちらに載っています。stackoverflow.com