Question

I've been struggling to get ListPreference to work with HoloEverywhere. I defined my settings in an XML file. I used the holo namespace for the attributes. Everything that is related to preferences uses classes from the org.holoeverywhere package so the problem lies somewhere else.

The problem occurs when I click on the ListPreference in my app. The preference should open a dialog with options to chose from. Instead it crashes, giving me the following stack trace:

12-20 09:42:59.363: E/AndroidRuntime(3005): FATAL EXCEPTION: main
12-20 09:42:59.363: E/AndroidRuntime(3005): java.lang.NullPointerException
12-20 09:42:59.363: E/AndroidRuntime(3005):     at org.holoeverywhere.ArrayAdapter.createViewFromResource(ArrayAdapter.java:204)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at org.holoeverywhere.ArrayAdapter.getView(ArrayAdapter.java:250)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.widget.AbsListView.obtainView(AbsListView.java:2267)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.widget.ListView.onMeasure(ListView.java:1156)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.View.measure(View.java:15172)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at org.holoeverywhere.widget.LinearLayout.measureChildWithMargins(LinearLayout.java:233)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.View.measure(View.java:15172)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at org.holoeverywhere.widget.LinearLayout.measureChildWithMargins(LinearLayout.java:233)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.View.measure(View.java:15172)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.View.measure(View.java:15172)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.View.measure(View.java:15172)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.View.measure(View.java:15172)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.View.measure(View.java:15172)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1848)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1075)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1273)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.Choreographer.doCallbacks(Choreographer.java:555)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.Choreographer.doFrame(Choreographer.java:525)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.os.Handler.handleCallback(Handler.java:615)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.os.Looper.loop(Looper.java:137)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at android.app.ActivityThread.main(ActivityThread.java:4745)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at java.lang.reflect.Method.invokeNative(Native Method)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at java.lang.reflect.Method.invoke(Method.java:511)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-20 09:42:59.363: E/AndroidRuntime(3005):     at dalvik.system.NativeStart.main(Native Method)

I'm currently using a PreferenceFragment, but the exact same thing happens when I was trying to add the preferences directly in the PreferenceActivity using addPreferencesFromResource(int).

The list preference (XML) itself:

    <ListPreference
        holo:defaultValue="false"
        holo:dialogTitle="@string/sett_inet_access_dial"
        holo:entries="@array/sett_inet_access_names"
        holo:entryValues="@array/sett_inet_access_values"
        holo:key="@string/keysett_inet_access"
        holo:summary="@string/sett_inet_access_summ"
        holo:title="@string/sett_inet_access_name" />

I would also like to add that this happens to all my ListPreference items (i have multiple).

Was it helpful?

Solution

OK. I've figured it out.

As it turns out. There is a bug in HoloEverywhere 1.4.0. The issue has already been reported and fixed: https://github.com/ChristopheVersieux/HoloEverywhere/issues/203

Unfortunately the fix has not been merged to the master branch of HE GitHub project. It's sitting calmly on the dev branch most likely waiting for the next release...

So if you have the same problem as me then you should use the dev branch, or fork the repository and cherry-pick THIS commit to your master branch.

The problem with styles not being applied properly to the dialog still persists though.

OTHER TIPS

Look into source code:

   private View createViewFromResource(int position, View convertView,
        ViewGroup parent, int resource) {
    View view;
    TextView text;
    if (convertView == null) {
        view = FontLoader.apply(mInflater.inflate(resource, parent, false));
    } else {
        view = convertView;
    }
    try {
        if (mFieldId == 0) {
            text = (TextView) view;
        } else {
            text = (TextView) view.findViewById(mFieldId);
        }
    } catch (ClassCastException e) {
        Log.e("ArrayAdapter",
                "You must supply a resource ID for a TextView");
        throw new IllegalStateException(
                "ArrayAdapter requires the resource ID to be a TextView", e);
    }

    T item = getItem(position);
    if (item instanceof CharSequence) {
        text.setText((CharSequence) item);
    } else {
        text.setText(item.toString());
    }
    return view;
}

It seems that textView is null, and it was not resolved from layout

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top