maurycyw / StaggeredGridView

A modified version of Android's experimental StaggeredGridView. Includes own OnItemClickListener and OnItemLongClickListener, selector, and fixed position restore.

Home Page:https://github.com/maurycyw/StaggeredGridViewDemo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NullPointerException after screen orientation change

zasadnyy opened this issue · comments

I have case when for portrait orientation I have one column and for landscape two columns. If we rotate from portrait to landscape we'll get NullPointerException. Stacktrace:

02-23 19:59:46.772: E/AndroidRuntime(3470): FATAL EXCEPTION: main
02-23 19:59:46.772: E/AndroidRuntime(3470): java.lang.NullPointerException
02-23 19:59:46.772: E/AndroidRuntime(3470):     at com.origamilabs.library.views.StaggeredGridView.populate(StaggeredGridView.java:965)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at com.origamilabs.library.views.StaggeredGridView.onLayout(StaggeredGridView.java:918)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.View.layout(View.java:14003)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.ViewGroup.layout(ViewGroup.java:4375)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.View.layout(View.java:14003)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.ViewGroup.layout(ViewGroup.java:4375)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.View.layout(View.java:14003)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.ViewGroup.layout(ViewGroup.java:4375)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1520)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.View.layout(View.java:14003)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.ViewGroup.layout(ViewGroup.java:4375)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at com.slidingmenu.lib.CustomViewAbove.onLayout(CustomViewAbove.java:457)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.View.layout(View.java:14003)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.ViewGroup.layout(ViewGroup.java:4375)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.widget.RelativeLayout.onLayout(RelativeLayout.java:985)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.View.layout(View.java:14003)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.ViewGroup.layout(ViewGroup.java:4375)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.View.layout(View.java:14003)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.ViewGroup.layout(ViewGroup.java:4375)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.View.layout(View.java:14003)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.ViewGroup.layout(ViewGroup.java:4375)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.View.layout(View.java:14003)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.ViewGroup.layout(ViewGroup.java:4375)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1892)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1711)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.Choreographer.doFrame(Choreographer.java:532)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.os.Handler.handleCallback(Handler.java:725)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.os.Looper.loop(Looper.java:137)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at android.app.ActivityThread.main(ActivityThread.java:5191)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at java.lang.reflect.Method.invokeNative(Native Method)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at java.lang.reflect.Method.invoke(Method.java:511)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
02-23 19:59:46.772: E/AndroidRuntime(3470):     at dalvik.system.NativeStart.main(Native Method)

Here is how I've fixed this issue:

         final int top = getPaddingTop();
         for(int i = 0; i<colCount; i++){
-           final int offset =  top + ((mRestoreOffsets != null)? Math.min(mRestoreOffsets[i], 0) : 0);
+            int offset = top;
+            if((mRestoreOffsets != null) && mRestoreOffsets.length == colCount)
+                offset +=  Math.min(mRestoreOffsets[i], 0);
            mItemTops[i] = (offset == 0) ? mItemTops[i] : offset;
            mItemBottoms[i] = (offset == 0) ? mItemBottoms[i] : offset;
         }

Thanks for the fix. Worked for me.

Thanks. This solves my excpetion during a screenOrientation change.

Thanks, saved me!

Thanks..worked for me too!

works. time to merge it in? :)