1

I have this simple custom ListView:

public class ChildListView extends ListView {

    private static final int ROW_HEIGHT = 43;

    private Context mContext;

    private int mRowCount = 0;

    public ChildListView(Context context) {
        super(context);
        mContext = context;
    }

    public ChildListView(Context context, int numRows) {
        super(context);
        mContext = context;
        mRowCount = numRows;
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(getMeasuredWidth(), mRowCount * Helper.dipToPx(mContext, ROW_HEIGHT));
    }

}

I have to measure the list's height due to it's the child of ExpandableListView.
Little more info: it works fine until I have added to ChildListView's adapter one more view. Now it have two views but I have got this exception:

10-26 14:33:43.781: E/AndroidRuntime(10138): FATAL EXCEPTION: main
10-26 14:33:43.781: E/AndroidRuntime(10138): java.lang.NullPointerException
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.ListView.measureScrapChild(ListView.java:1135)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.ListView.onMeasure(ListView.java:1104)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at package.views.ChildListView.onMeasure(ChildListView.java:38)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.view.View.measure(View.java:8526)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3228)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:701)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:311)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.view.View.measure(View.java:8526)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.ListView.setupChild(ListView.java:1869)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.ListView.makeAndAddView(ListView.java:1796)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.ListView.fillDown(ListView.java:670)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.ListView.fillSpecific(ListView.java:1350)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.ListView.layoutChildren(ListView.java:1624)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.AbsListView.onLayout(AbsListView.java:1260)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.view.View.layout(View.java:7277)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.view.View.layout(View.java:7277)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.view.View.layout(View.java:7277)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.view.View.layout(View.java:7277)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.view.View.layout(View.java:7277)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.view.ViewRoot.performTraversals(ViewRoot.java:1203)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1957)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.os.Looper.loop(Looper.java:150)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at android.app.ActivityThread.main(ActivityThread.java:4277)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at java.lang.reflect.Method.invokeNative(Native Method)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at java.lang.reflect.Method.invoke(Method.java:507)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-26 14:33:43.781: E/AndroidRuntime(10138):    at dalvik.system.NativeStart.main(Native Method)

It is threw at this line:

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

Thanks to any help!

Gabriele Mariotti
  • 320,139
  • 94
  • 887
  • 841
Alex Zaitsev
  • 2,013
  • 4
  • 30
  • 56
  • you got any value when onMesure gets called?? – AndroidLearner Oct 26 '12 at 11:47
  • When overriding `onMeasure()`, the `super.onMeasure()` method is typically called last. See [this answer](http://stackoverflow.com/a/4662629/357055) for some explanation and a few suggestions. – acj Oct 26 '12 at 12:23
  • Have you sanity-checked the values of the arguments that you're passing to `setMeasuredDimension()` and `super.onMeasure()`? – acj Oct 26 '12 at 18:53
  • actually arguments that i'm passing to super.onMeasure() are defined by system. Arguments in setMeasuredDimension() are 100% correct. – Alex Zaitsev Oct 26 '12 at 19:30

0 Answers0