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生まれ。
2019年くらいからフロントエンドエンジニアを目指している元アフィリエイターです💩

penpenをフォローする
penpenをフォローする
penpenメモ

コメント

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