StaggeredGridView
StaggeredGridView copied to clipboard
NullPointerException after screen orientation change
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? :)