android - ListPreference:使用字符串数组作为条目,使用整数数组作为条目值不起作用

标签 android listpreference

我在 settings.xml 文件中使用 ListPreference。我想向用户显示一个包含 3 个选项的列表以供选择。当用户在“设置”中选择其中一个选项时,我收到此错误:

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;
        }
}

如果我为 entryValues 使用另一个字符串数组,它可以工作。例如,如果我使用相同的字符串数组作为值和条目:

    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;
        }

为什么我不能对 ListPreference 条目和值使用字符串数组和整数数组?

最佳答案

答案很简单:因为 Android 就是这样设计的。它只是为条目和条目值使用 String 数组,仅此而已。而且我看不出有任何问题,因为您可以使用 Integer.parseInt() 轻松地将 String 转换为 int方法。希望这会有所帮助。

关于android - ListPreference:使用字符串数组作为条目,使用整数数组作为条目值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11346916/

相关文章:

Android UI - 带边框的圆 table

javascript - 使用 Phonegap 链接到 Android Market 中的应用程序

Android模拟器SD卡问题

android - 物体检测android opencv

android - HoloEverywhere + ListPreference = 崩溃

android - 如何在 Android 中从 java 代码编辑 ListPreference 值

android - 在 Android 中使用列表首选项

android - 显示android :dialogMessage in a ListPreference dialog

android - RuntimeException(Chromecast)

Android动态数组ListPreference