sergejsha / pinned-section-listview

Easy to use ListView with pinned sections for Android.
2.59k stars 808 forks source link

NullPointer getting layoutParams #7

Closed PaNaVTEC closed 11 years ago

PaNaVTEC commented 11 years ago

Seems I get LayoutParams to null, but pinnedView is not null. Can we add a default layoutparams to the listview?

This is the stacktrace:

java.lang.NullPointerException at com.hb.views.PinnedSectionListView.createPinnedShadow(PinnedSectionListView.java:164) at com.hb.views.PinnedSectionListView.access$400(PinnedSectionListView.java:34) at com.hb.views.PinnedSectionListView$1.onScroll(PinnedSectionListView.java:106) at android.widget.AbsListView.invokeOnItemScrollListener(AbsListView.java:1340) at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4949) at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3087) at android.widget.AbsListView.startScrollIfNeeded(AbsListView.java:3032) at android.widget.AbsListView.onTouchEvent(AbsListView.java:3357) at android.view.View.dispatchTouchEvent(View.java:7246) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2168) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1903) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1953) at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1405) at android.app.Activity.dispatchTouchEvent(Activity.java:2410) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1901) at android.view.View.dispatchPointerEvent(View.java:7426) at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3220) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3165) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4292) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4271) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4363) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179) at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method) at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:171) at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:4342) at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:4382) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) at android.view.Choreographer.doCallbacks(Choreographer.java:562) at android.view.Choreographer.doFrame(Choreographer.java:530) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5041) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) at dalvik.system.NativeStart.m

sergejsha commented 11 years ago

LayoutParams can only be null if you use wrong inflate() method in Adapter.getView(). Make sure you use inflate(id, parent, false) one. Does it work now?

On Tue, May 28, 2013 at 7:56 PM, Christian Panadero < notifications@github.com> wrote:

Seems I get LayoutParams to null, but pinnedView is not null. Can we add a default layoutparams to the listview?

This is the stacktrace:

java.lang.NullPointerException at com.hb.views.PinnedSectionListView.createPinnedShadow(PinnedSectionListView.java:164) at com.hb.views.PinnedSectionListView.access$400(PinnedSectionListView.java:34) at com.hb.views.PinnedSectionListView$1.onScroll(PinnedSectionListView.java:106) at android.widget.AbsListView.invokeOnItemScrollListener(AbsListView.java:1340) at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4949) at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3087) at android.widget.AbsListView.startScrollIfNeeded(AbsListView.java:3032) at android.widget.AbsListView.onTouchEvent(AbsListView.java:3357) at android.view.View.dispatchTouchEvent(View.java:7246) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2168) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1903) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1953) at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1405) at android.app.Activity.dispatchTouchEvent(Activity.java:2410) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1901) at android.view.View.dispatchPointerEvent(View.java:7426) at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3220) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3165) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4292) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4271) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4363) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179) at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method) at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:171) at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:4342) at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:4382) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) at android.view.Choreographer.doCallbacks(Choreographer.java:562) at android.view.Choreographer.doFrame(Choreographer.java:530) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5041) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) at dalvik.system.NativeStart.m

— Reply to this email directly or view it on GitHubhttps://github.com/beworker/pinned-section-listview/issues/7 .

PaNaVTEC commented 11 years ago

Ok, I have a class that extends LinearLayout and in a constructor I do an "infalter.inflate(R.layout.layoutid, this, true); This will inflate a LinearLayout inside another, the outside layout does not have LayoutParams, so it crashes the listview, if i set in code setLayoutParams(AbsListView.. BLABLA) it works. But this is the expected behaviour if the item does not have LayoutParams?

Thanks!

sergejsha commented 11 years ago

I would say this is not really a good idea to return a view without layout parameters. This means you don't care how big your row in the list is - whether it's height wrap_content or has a predefined value. This makes your app dependent from the ListView implementation. Next time they change default values your list will look different.

In spite of this, I added default values for the case when layoutParames are null. Pinned view will be measured using "layout_height:wrap_content" which appears to be default value for the list item. Could you please pull changes and check whether it works for you now? Thanks!

PaNaVTEC commented 11 years ago

Hi, have you push the changes? I cannot see any new commit.

Thanks!

sergejsha commented 11 years ago

Oups! Here they are :)

PaNaVTEC commented 11 years ago

It now works ok with null layout params, I would check to an item implementation that is just the inflate anyway :) Thanks for your work!