PreferenceActivity da una excepción NullPointerException cuando se selecciona de ListPreference

Soy nuevo en el uso de la PreferenceActivity.

Tarea: Permitir que el usuario elija el diseño del programa en Preferencias

Problema: La selección de una opción en la lista Preference hace que una excepción NullPointerException

Surge la excepción: En android.preference.ListPreference.onDialogClosed ()

texto alternativo

(Acortado) Código:

private static final String PREF_LAYOUT_KEY = "PrefLayout"; private static final int DEFAULT_LAYOUT = LayoutHelper.LAYOUT_DOUBLE ; private static int mListLayout = DEFAULT_LAYOUT ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); pref.registerOnSharedPreferenceChangeListener(this); mListLayout = pref.getInt(PREF_LAYOUT_KEY, DEFAULT_LAYOUT); } @Override public void onSharedPreferenceChanged(SharedPreferences pref, String key) { Log.v(TAG, "OnSharedPreferencesChanged run" ); // TODO Testing Purposes if( key.equals( PREF_LAYOUT_KEY ) ){ mListLayout = pref.getInt(key, DEFAULT_LAYOUT); } } 

[PreferenceActivity]

 public class Preferences extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref); } } 

[Res / xml / pref.xml]

 <PreferenceCategory android:title="@string/pref_cat1_title"> <ListPreference android:title="@string/pref_layout_name" android:summary="@+id/pref_chosen_layout" android:key="PrefLayout" android:entries="@array/prefLayoutOptions" android:entryValues="@array/prefLayoutOptionsValues" /> </PreferenceCategory> 

[Strings.xml]

 <string name="pref_cat1_title">Layout</string> <string name="pref_layout_name">"Layout of list"</string> <array name="prefLayoutOptions"> <item>Layout 1 (single)</item> <item>Layout 2 (double)</item> <item>Layout 3 (triple)</item> <item>Layout 4 (quad)</item> </array> <array name="prefLayoutOptionsValues"> <item>50</item> <item>51</item> <item>52</item> <item>53</item> </array> 

El bit de código que registra OnSharedPreferencesChanged que se ejecuta nunca llega allí.

¿Puede alguien ver dónde me he equivocado?

EDITAR. Aquí está la parte superior del seguimiento de la pila:

 E/AndroidRuntime( 2707): java.lang.NullPointerException E/AndroidRuntime( 2707): at android.preference.ListPreference.onDialogClosed(ListPreference.java:218) E/AndroidRuntime( 2707): at android.preference.DialogPreference.onDismiss(DialogPreference.java:384) E/AndroidRuntime( 2707): at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1047) E/AndroidRuntime( 2707): at android.os.Handler.dispatchMessage(Handler.java:99) 

 mListLayout = pref.getInt(PREF_LAYOUT_KEY, DEFAULT_LAYOUT); 

Que va a fallar, porque la preferencia es una cadena, no un int.

 <array name="prefLayoutOptions"> <array name="prefLayoutOptionsValues"> 

Cambiar estos a <string-array> . A continuación se muestra un ejemplo de proyecto que demuestra el uso de ListPreference .

Encontré el mismo problema. Parece que sólo puedes usar valores de cadena: http://code.google.com/p/android/issues/detail?id=2096

Håkan

Pienso que usted necesita fijar el oyente del cambio de la preferencia para sus preferencias a la derecha en la actividad, intentar poner eso al onCreate de la actividad:

  Map<String, ?> prefs = this.getPreferenceManager().getSharedPreferences().getAll(); for (String preferenceName : prefs.keySet()) { Preference p = this.findPreference(preferenceName); if (p != null) { Object value = prefs.get(preferenceName); p.setOnPreferenceChangeListener(this); } } 
  • IabHelper error de Android (NullPointerException) launchPurchaseFlow?
  • NullPointer Exception en Android Google Maps durante la actualización de Mapa
  • Unidad de pruebas NPE, cuando agrego fragmento transiciones personalizadas
  • Configuración de android: versionName como referencia a cadena de recursos lleva a NullPointerException en el emulador
  • Lista de objeto personalizado y Parcelable dar NullPointerException
  • En Java, si un puntero nulo sucede muy raramente es mejor usar catch en lugar de if
  • ¿Por qué tengo un accidente al salir de mi actividad?
  • ¿Por qué File.listFiles devuelve null cuando se llama a un directorio?
  • Android TabHost.addTab -> Excepción de puntero nulo
  • NullPointerException en el método de mutación de Drawable Android 1.6
  • NullPointerExceptions sólo en algunos dispositivos Samsung Galaxy?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.