summaryrefslogtreecommitdiff
path: root/core/java/android/widget/GridView.java
diff options
context:
space:
mode:
authorRomain Guy <romainguy@android.com>2009-09-29 15:17:47 -0700
committerRomain Guy <romainguy@android.com>2009-09-29 15:17:47 -0700
commit8bcdc0764f2f569173863655f96cdec2aea2d0da (patch)
treeecadbfb2a157e7f2d3653820faebe82923a23ece /core/java/android/widget/GridView.java
parent4c232c5b3f7fcbea73cd3cec2d3befe06e85c068 (diff)
Prevent NPE when doing a fillSpecific layout.
Change-Id: I67285c9a314400da11fdf158c413bf05fe6b982e
Diffstat (limited to 'core/java/android/widget/GridView.java')
-rw-r--r--core/java/android/widget/GridView.java18
1 files changed, 13 insertions, 5 deletions
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;