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
- Error de puntero nulo con hideSoftInputFromWindow
- NullPointerException Advertencia sobre getView () dentro del método onActivityCreated / onStart / onViewCreated
- Esperaba un mapa mientras se deserializaba, pero obtuvo una clase java.lang.Long
- App fallando debido a la excepción nullpointer
- Obtención de la excepción Nullpointer después de actualizar a la compatibilidad con el diseño de Android 22.2.1
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 ()
(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)
- Excepción de puntero nulo de Android para las preferencias compartidas
- Tabhost nullpointerexception cuando tabhost no es la única cosa en el diseño
- ¿Por qué se arroja NPE al finalizar Actividad?
- IllegalStateException: Fragmento <ThisFragment> no está actualmente en el FragmentManager
- Android Reproducción de archivos de película en un fondo de pantalla en vivo
- La galería onItemClick y onTouchEvent no funcionan juntas desde la versión android 3.0
- Mi ubicación actual siempre devuelve null. ¿Cómo puedo arreglar esto?
- Android, NetworkInfo.getTypeName (), NullpointerException
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); } }
- GetWidth devuelve 0 en Fragment, getPaddingLeft devuelve no-cero
- Descomprimir archivo en activos de Android