事象
array.xmlで指定したentryValues(integer-array)をListPreference#setEntryValues()の中身に使おうとするとNullPointerExceptionで落ちる。
NullPointerExceptionで落ちるarray.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="entries"> <item>Hoge</item> <item>Fuga</item> <item>Piyo</item> </string-array> <integer-array name="entryValues"> <item>1</item> <item>2</item> <item>3</item> </integer-array> </resources> |
コード
1 2 3 4 5 6 7 |
PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(this); ListPreference listPreference = new ListPreference(this); listPreference.setEntries(R.array.entries); listPreference.setEntryValues(R.array.entryValues); ... screen.addPreference(listPreference); setPreferenceScreen(screen); |
原因
setEntryValues()の引数がCharSequence[]だから受け付けてくれないってことらしい。
Issueにも上がってた。
Issue 2096 – android – ListPreference is broken with alternate array types
対応方法
entryValuesをstring-arrayにしてやれば動く。
大丈夫なarray.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="entries"> <item>Hoge</item> <item>Fuga</item> <item>Piyo</item> </string-array> <string-array name="entryValues"> <item>1</item> <item>2</item> <item>3</item> </string-array> </resources> |
ListPreference#setEntryValues()にInteger配列を渡せない