J'utilise dans un fichier settings.xml une ListPreference. Je veux montrer à l'utilisateur une liste de 3 options à sélectionner ; lorsque l'utilisateur choisit l'une des options dans les paramètres, j'obtiens cette erreur :
07-05 16:31:25.117: E/AndroidRuntime(30415): FATAL EXCEPTION: main
07-05 16:31:25.117: E/AndroidRuntime(30415): java.lang.NullPointerException
07-05 16:31:25.117: E/AndroidRuntime(30415): at android.preference.ListPreference.onDialogClosed(ListPreference.java:264)
07-05 16:31:25.117: E/AndroidRuntime(30415): at android.preference.DialogPreference.onDismiss(DialogPreference.java:381)
07-05 16:31:25.117: E/AndroidRuntime(30415): at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1228)
07-05 16:31:25.117: E/AndroidRuntime(30415): at android.os.Handler.dispatchMessage(Handler.java:99)
07-05 16:31:25.117: E/AndroidRuntime(30415): at android.os.Looper.loop(Looper.java:137)
07-05 16:31:25.117: E/AndroidRuntime(30415): at android.app.ActivityThread.main(ActivityThread.java:4424)
07-05 16:31:25.117: E/AndroidRuntime(30415): at java.lang.reflect.Method.invokeNative(Native Method)
07-05 16:31:25.117: E/AndroidRuntime(30415): at java.lang.reflect.Method.invoke(Method.java:511)
07-05 16:31:25.117: E/AndroidRuntime(30415): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-05 16:31:25.117: E/AndroidRuntime(30415): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-05 16:31:25.117: E/AndroidRuntime(30415): at dalvik.system.NativeStart.main(Native Method)
C'est le code de la 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" />
Et voici les arrérages que j'utilise pour remplir les entrées :
<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>
Dans mon onSharedPreferenceChanged, j'utilise ces valeurs de cette façon :
@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;
}
}
Si j'utilise pour le valeurs d'entrée une autre chaîne de caractères, cela fonctionne. Par exemple, si j'utilise le même tableau de chaînes de caractères comme valeurs et entrées :
android:entries="@array/date_alignement"
android:entryValues="@array/date_alignement"
alors je dois changer un peu mon code mais ça marche :
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;
}
Pourquoi je ne peux pas utiliser un strig-array et un integer-array pour les entrées et les valeurs d'une ListPreference ?