From 8bcdc0764f2f569173863655f96cdec2aea2d0da Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Tue, 29 Sep 2009 15:17:47 -0700 Subject: Prevent NPE when doing a fillSpecific layout. Change-Id: I67285c9a314400da11fdf158c413bf05fe6b982e --- core/java/android/widget/GridView.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'core/java/android/widget/GridView.java') diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java index 70555dca081e..ffe9908e892b 100644 --- a/core/java/android/widget/GridView.java +++ b/core/java/android/widget/GridView.java @@ -220,6 +220,8 @@ public class GridView extends AbsListView { selectedView = temp; } + // mReferenceView will change with each call to makeRow() + // do not cache in a local variable outside of this loop nextTop = mReferenceView.getBottom() + mVerticalSpacing; pos += mNumColumns; @@ -233,7 +235,8 @@ public class GridView extends AbsListView { final int horizontalSpacing = mHorizontalSpacing; int last; - int nextLeft = mListPadding.left + ((mStretchMode == STRETCH_SPACING_UNIFORM) ? horizontalSpacing : 0); + int nextLeft = mListPadding.left + + ((mStretchMode == STRETCH_SPACING_UNIFORM) ? horizontalSpacing : 0); if (!mStackFromBottom) { last = Math.min(startPos + mNumColumns, mItemCount); @@ -252,16 +255,14 @@ public class GridView extends AbsListView { final boolean inClick = touchModeDrawsInPressedState(); final int selectedPosition = mSelectedPosition; - mReferenceView = null; - + View child = null; for (int pos = startPos; pos < last; pos++) { // is this the selected item? boolean selected = pos == selectedPosition; // does the list view have focus or contain focus final int where = flow ? -1 : pos - startPos; - final View child = makeAndAddView(pos, y, flow, nextLeft, selected, where); - mReferenceView = child; + child = makeAndAddView(pos, y, flow, nextLeft, selected, where); nextLeft += columnWidth; if (pos < last - 1) { @@ -273,6 +274,8 @@ public class GridView extends AbsListView { } } + mReferenceView = child; + if (selectedView != null) { mReferenceViewInSelectedRow = mReferenceView; } @@ -465,6 +468,11 @@ public class GridView extends AbsListView { mFirstPosition = motionRowStart; final View referenceView = mReferenceView; + // We didn't have anything to layout, bail out + if (referenceView == null) { + return null; + } + final int verticalSpacing = mVerticalSpacing; View above; -- cgit v1.2.3