diff options
| author | Alan Viverette <alanv@google.com> | 2014-02-14 01:48:59 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-02-14 01:48:59 +0000 |
| commit | 23160f4fb911811759643bd3ef42e7b96abc1265 (patch) | |
| tree | 13b0142155113470f80e0c61484f6b653b5e270c /core/java/android/widget/GridView.java | |
| parent | 73f3a33b46691deb9ce7f3ce54feef8c973686ff (diff) | |
| parent | d22db216fe7da01d70d4db3b3e76797aea64e956 (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.java | 40 |
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; + } + } } |
