Сбой PreferenceFragment, нулевая ссылка на объект


У меня есть простая ActionBarActivity, которая содержит PreferenceFragment следующим образом:

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);
    }
}
}

Вот мои предпочтения.xml:

<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>

Когда я перехожу к SettingsActivity, я получаю следующий журнал ошибок:

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)

Из моего понимания, я реализую PreferenceFragment точно в соответствии с руководством Android, и я не могу найти ничего в журнале ошибок, который говорит мне, где искать проблему (скорее всего, потому что я все еще новичок). С тех пор как я повидал почти каждого Вопрос отдаленно связан с тем, с чем я имею дело, возможно, стоит отметить, что я использую Lollipop, и я использую тему.Совместимости приложений.Свет. Остальная часть моего приложения работает хорошо, поэтому я не понимаю, как тема может быть проблемой.

Спасибо, и дайте мне знать, если я могу предоставить дополнительную информацию.

Правка:

Вот значения, взятые из моих 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>
2 10

2 ответа:

Следует отдать должное njzk2 за указание на то, что это была проблема с поиском нулевого значения ListPreference. Оказывается, один из массивов был сохранен как "integer-array "вместо" string-array". Изменение этого исправило проблему.

Изменить все элементы из

<integer-array ...

To

<string-array ...

Работай на меня.