ListPreference:使用string数组作为Entry和整数数组作为Entry Values不起作用
我在一个List.xml文件中使用ListPreference。 我想向用户显示3个选项的列表来select。 当用户在“设置”中select其中一个选项时,出现此错误:
java.lang.NullPointerException at android.preference.ListPreference.onDialogClosed(ListPreference.java:264) at android.preference.DialogPreference.onDismiss(DialogPreference.java:381) at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1228) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4424) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) at dalvik.system.NativeStart.main(Native Method)
这是ListPreference的代码:
<ListPreference android:entries="@array/date_alignement" android:entryValues="@array/date_alignement_values" android:key="settings_date_alignement" android:summary="@string/settings_date_alignement_summary" android:title="@string/settings_date_alignement_title" />
这里是我用来填充条目的数组:
<string-array name="date_alignement"> <item>"Top"</item> <item>"Center"</item> <item>"Bottom"</item> </string-array> <integer-array name="date_alignement_values"> <item >0</item> <item >1</item> <item >2</item> </integer-array>
在我的onSharedPreferenceChanged中,我以这种方式使用这些值:
@Override public void onSharedPreferenceChanged( SharedPreferences sharedPreferences, String key) { //Text mAlignment = mPrefs.getInt(PREF_ALIGNMENT, 1); switch (mAlignment) { case 0: offsetY = mHeight/3.0f; break; case 2: offsetY = mHeight*2.0f/3.0f; break; default: offsetY = mHeight/2.0f; break; } }
如果我使用另一个string数组作为entryValues它的作品。 例如,如果我使用相同的string数组作为值和条目:
android:entries="@array/date_alignement" android:entryValues="@array/date_alignement"
那么我必须稍微改变我的代码,但它的工作原理:
if(mAlignment.equalsIgnoreCase("center")) { offsetY = mHeight/2.0f; } else if(mAlignment.equalsIgnoreCase("top")) { offsetY = mHeight/3.0f; } else if(mAlignment.equalsIgnoreCase("bottom")) { offsetY = mHeight*2.0f/3.0f; }
为什么我不能使用一个string数组和一个整数数组的ListPreference条目和值?
答案很简单:因为Android是这样devise的。 它只是使用String
数组的条目和条目值,这就是全部。 在这个事实中,我看不出任何问题,因为使用Integer.parseInt()
方法可以轻松地将String
转换为int
。 希望这可以帮助。
答案在列表首选项文档中列出 。
int findIndexOfValue (String value)
将返回给定值的索引,参数被视为一个string,所以entryValues数组应该是一个string数组来获得这个工作。
- Android AudioRecord强制另一个stream到MICaudio源
- 我怎样才能在Android上debuggingJavaScript?
- Android模拟器:如何监控networkingstream量?
- 不能禁用特定的Android设备上的主页button
- Android Studio中的debug.keystore在哪里?
- Android TextView:“不要连接显示的文本与setText”
- Hibernate是一个Android应用程序的矫枉过正?
- 错误:(1,0)找不到id为'com.android.application'的插件
- 如何在listactivity列表中的button列表中激活onListItemClick?