summaryrefslogtreecommitdiff
path: root/core/java/android/widget/GridView.java
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2014-02-14 01:48:59 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-02-14 01:48:59 +0000
commit23160f4fb911811759643bd3ef42e7b96abc1265 (patch)
tree13b0142155113470f80e0c61484f6b653b5e270c /core/java/android/widget/GridView.java
parent73f3a33b46691deb9ce7f3ce54feef8c973686ff (diff)
parentd22db216fe7da01d70d4db3b3e76797aea64e956 (diff)
Merge "Refactor AbsListView position scrollers for better abstraction"
Diffstat (limited to 'core/java/android/widget/GridView.java')
-rw-r--r--core/java/android/widget/GridView.java40
1 files changed, 33 insertions, 7 deletions
diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java
index 1a15576e86c8..67430028cbbb 100644
--- a/core/java/android/widget/GridView.java
+++ b/core/java/android/widget/GridView.java
@@ -35,6 +35,8 @@ import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo.CollectionInfo;
import android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo;
import android.view.animation.GridLayoutAnimationController;
+import android.widget.AbsListView.AbsPositionScroller;
+import android.widget.ListView.ListViewPositionScroller;
import android.widget.RemoteViews.RemoteView;
import java.lang.annotation.Retention;
@@ -1027,13 +1029,8 @@ public class GridView extends AbsListView {
}
@Override
- public int getRowForPosition(int position) {
- return position / mNumColumns;
- }
-
- @Override
- public int getFirstPositionForRow(int row) {
- return row * mNumColumns;
+ AbsPositionScroller createPositionScroller() {
+ return new GridViewPositionScroller();
}
@Override
@@ -2361,4 +2358,33 @@ public class GridView extends AbsListView {
column, 1, row, 1, isHeading, isSelected);
info.setCollectionItemInfo(itemInfo);
}
+
+ /**
+ * Sub-position scroller that understands the layout of a GridView.
+ */
+ class GridViewPositionScroller extends AbsSubPositionScroller {
+ @Override
+ public int getRowForPosition(int position) {
+ return position / mNumColumns;
+ }
+
+ @Override
+ public int getFirstPositionForRow(int row) {
+ return row * mNumColumns;
+ }
+
+ @Override
+ public int getHeightForRow(int row) {
+ final int firstRowPosition = row * mNumColumns;
+ final int lastRowPosition = Math.min(getCount(), firstRowPosition + mNumColumns);
+ int maxHeight = 0;
+ for (int i = firstRowPosition; i < lastRowPosition; i++) {
+ final int height = getHeightForPosition(i);
+ if (height > maxHeight) {
+ maxHeight = height;
+ }
+ }
+ return maxHeight;
+ }
+ }
}