PreferenceFragment crashing, objeto nulo Referencia
Tengo un ActionBarActivity simple que contiene un PreferenceFragment como sigue:
import android.app.Activity; import android.os.Bundle; import android.preference.PreferenceFragment; public class SettingsActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); // Display the fragment as the main content. getFragmentManager().beginTransaction() .replace(R.id.fra_settings_container, new SettingsFragment()).commit(); } public static class SettingsFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.preferences); } } }
Aquí tienes mis preferencias.xml:
- Android: ¿Cómo ajustar el margen / relleno en la preferencia?
- Crear una DialogPreference desde XML
- Título de preferencia de Android / estilo de texto de resumen
- Preferencia de la casilla de verificación Android
- Cómo implementar una confirmación (sí / no) DialogPreference?
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <ListPreference android:defaultValue="15" android:dialogTitle="@string/settings_heading_alarm_interval" android:entries="@array/alarm_interval_entries" android:entryValues="@array/alarm_interval_values" android:key="alarm_interval" android:title="@string/settings_heading_alarm_interval" /> <ListPreference android:defaultValue="1" android:dialogTitle="@string/settings_heading_alarm_type" android:entries="@array/alarm_type_entries" android:entryValues="@array/alarm_type_values" android:key="alarm_type" android:title="@string/settings_heading_alarm_type" /> <CheckBoxPreference android:key="alarm_vibrate_only" android:title="@string/settings_heading_silent" /> <RingtonePreference android:dependency="alarm_vibrate_only" android:key="alarm_tone" android:title="@string/settings_heading_alarm_tone" android:showDefault="true" android:showSilent="true"/> </PreferenceScreen>
Cuando navego a SettingsActivity recibo el siguiente registro de errores:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Object.equals(java.lang.Object)' on a null object reference at android.preference.ListPreference.findIndexOfValue(ListPreference.java:231) at android.preference.ListPreference.getValueIndex(ListPreference.java:240) at android.preference.ListPreference.getEntry(ListPreference.java:218) at android.preference.ListPreference.getSummary(ListPreference.java:164) at android.preference.Preference.onBindView(Preference.java:550) at android.preference.Preference.getView(Preference.java:489) at android.preference.PreferenceGroupAdapter.getView(PreferenceGroupAdapter.java:246) at android.widget.AbsListView.obtainView(AbsListView.java:2344) at android.widget.ListView.makeAndAddView(ListView.java:1864) at android.widget.ListView.fillDown(ListView.java:698) at android.widget.ListView.fillFromTop(ListView.java:759) at android.widget.ListView.layoutChildren(ListView.java:1659) at android.widget.AbsListView.onLayout(AbsListView.java:2148) at android.view.View.layout(View.java:15596) at android.view.ViewGroup.layout(ViewGroup.java:4966) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) at android.view.View.layout(View.java:15596) at android.view.ViewGroup.layout(ViewGroup.java:4966) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) at android.widget.FrameLayout.onLayout(FrameLayout.java:508) at android.view.View.layout(View.java:15596) at android.view.ViewGroup.layout(ViewGroup.java:4966) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) at android.widget.FrameLayout.onLayout(FrameLayout.java:508) at android.view.View.layout(View.java:15596) at android.view.ViewGroup.layout(ViewGroup.java:4966) at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:494) at android.view.View.layout(View.java:15596) at android.view.ViewGroup.layout(ViewGroup.java:4966) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) at android.widget.FrameLayout.onLayout(FrameLayout.java:508) at android.view.View.layout(View.java:15596) at android.view.ViewGroup.layout(ViewGroup.java:4966) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2072) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1829) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) at android.view.Choreographer.doCallbacks(Choreographer.java:580) at android.view.Choreographer.doFrame(Choreographer.java:550) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Desde mi entendimiento, estoy implementando un PreferenceFragment exactamente según la guía de Android, y no puedo encontrar nada en el registro de errores que me dice dónde buscar un problema (lo más probable es porque todavía soy un principiante). Puesto que he visto casi cada pregunta remotamente relacionada con lo que estoy tratando, puede ser digno de nota que estoy funcionando Lollipop, y estoy usando Theme.Appcompat.Light. El resto de mi aplicación funciona bien, así que no entiendo cómo el tema podría ser el problema.
Gracias, y hágamelo saber si puedo proporcionar más información.
Editar:
Estos son los valores tomados de mi archivo string_arrays.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="alarm_type_entries"> <item name="alarm_continuous">Continuous</item> <item name="alarm_single">Sound Once</item> <item name="alarm_minute">Sound Each Minute</item> </string-array> <string-array name="alarm_type_values"> <item name="continuous">1</item> <item name="single">2</item> <item name="minute">3</item> </string-array> <string-array name="alarm_interval_entries"> <item name="interval_fifteen">15 Minutes</item> <item name="interval_thirty">30 Minutes</item> <item name="interval_forty_five">45 Minutes</item> <item name="interval_one_hour">1 Hour</item> <item name="interval_two_hours">2 Hours</item> <item name="interval_three_hours">3 Hours</item> </string-array> <integer-array name="alarm_interval_values"> <item name="fifteen">15</item> <item name="thirty">30</item> <item name="forty_five">45</item> <item name="one_hour">60</item> <item name="two_hours">120</item> <item name="three_hours">180</item> </integer-array> </resources>
- Personalización de CheckBoxPreference vía android: widgetLayout
- ActivityNotFoundException cuando targetClass del paquete diferente en PreferenceScreen
- Android: ¿Cómo maximizar el ancho de PreferenceFragment (o deshacerse del margen)?
- Combo preferencia en Android
- Preferencia android divisor horizontal en la preferencia personalizada?
- Android cómo obtener la preferencia Pantalla de un checkBoxPreference
- Título de Preferencia de Android en dos líneas
- SwitchPreference no cambia el estado después de establecer onPreferenceChangeListener
El crédito debería ir a njzk2 para señalar que era un problema con ListPreference encontrar un valor nulo. Resulta que una de las matrices se almacenó como una "matriz de números enteros" en lugar de una "matriz de cadenas". Cambiar eso arregló el problema.
Cambiar todos los elementos de
<integer-array ...
a
<string-array ...
Trabaja para mi.
- ¿El registro reduce la velocidad de una aplicación de producción de Android?
- ¿Hay algún servicio de notificación push en Android como Apple Push Notification Service?