ListPreferenceのentryValuesにはstring-arrayじゃないとダメっぽい

以下のようにListPreference の entryValues に integer-array を指定すると

arrays.xml

<string-array name="test1">
    <item>ああああ</item>
    <item>いいいい</item>
    <item>うううう</item>
</string-array>
<integer-array name="test2">
    <item>1</item>
    <item>2</item>
    <item>3</item>
</integer-array>

preferences.xml

<ListPreference
    android:title="test"
    app:entries="@array/test1"
    app:entryValues="@array/test2"
    app:key="testdayo" />

 

以下のようにNullPointerExceptionのエラーが出た。

java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean java.lang.Object.equals(java.lang.Object)’ on a null object reference

 

「え?なんでなの?」と思って調べたところ、どうやら「entryValues には string-array を指定しないとダメだよ」というAndroidの仕様があるらしい。

 

なので

arrays.xml

<string-array name="test1">
    <item>ああああ</item>
    <item>いいいい</item>
    <item>うううう</item>
</string-array>
<string-array name="test2">
    <item>1</item>
    <item>2</item>
    <item>3</item>
</string-array>

preferences.xml

<ListPreference
    android:title="test"
    app:entries="@array/test1"
    app:entryValues="@array/test2"
    app:key="testdayo" />

という風にstring-arrayに書き換えて

値を参照するときは

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
Integer.parseInt(sp.getString("testdayo","aaaa")

という風にInteger.parseIntでIntに変換するしかないっぽいです。

 

参考:

https://stackoverflow.com/questions/11346916/listpreference-use-string-array-as-entry-and-integer-array-as-entry-values-does

http://yadex205.hatenablog.jp/entry/2015/08/28/094318

http://y-anz-m.blogspot.com/2011/07/androidresrouce-integer.html

Android
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました