以下のように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に変換するしかないっぽいです。
参考:
http://yadex205.hatenablog.jp/entry/2015/08/28/094318
http://y-anz-m.blogspot.com/2011/07/androidresrouce-integer.html
コメント