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); } } 
  • setText () no funciona en el diseño hinchado
  • Reciclar vista - java.lang.NullPointerException
  • Excepción de puntero NULL de getSupportFragmentManager de Android en Fragmento
  • Después de onLongPress, la primera vista en gridview obtiene NullPointerException en startDrag
  • Android, ¿Cómo usar el método readTypedList correctamente en una clase Parcelable?
  • Android: this.getApplication () devuelve el puntero NULL
  • Puntero nulo en ExpandedView para la búsqueda de ActionBar
  • NullPointerException en android.widget.AbsListView.contentFits (AbsListView.java:722)
  • Android: NullPointerException en la vista web
  • Acceder a un método de un fragmento de la actividad ViewPager
  • Android nullpointerexception en ActionBarDrawerToggle.syncState ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.