diff options
| author | Alan Viverette <alanv@google.com> | 2014-02-13 17:47:38 -0800 |
|---|---|---|
| committer | Alan Viverette <alanv@google.com> | 2014-02-13 17:47:38 -0800 |
| commit | d22db216fe7da01d70d4db3b3e76797aea64e956 (patch) | |
| tree | aacc617c508f7bb522f0104acff28030542a8a2f /core/java/android/widget/GridView.java | |
| parent | d63b4314b85e982a1d70d4064af59851f476dd36 (diff) | |
Refactor AbsListView position scrollers for better abstraction
The AbsListView sub-scroller knows nothing about layout. That's now
handled by ListView and GridView, with subclasses of AbsListView using
the default PositionScroller. Removes unnecessary (unreleased) APIs.
Also fixes a bounds check that was using the item position rather than
the child view position.
BUG: 13006641
Change-Id: I2adb0f15623e32295facf81f5ada974083ba03ce
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 0b424f72be21..24e4cb39ae32 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 @@ -2357,4 +2354,33 @@ public class GridView extends AbsListView { final CollectionItemInfo itemInfo = CollectionItemInfo.obtain(column, 1, row, 1, isHeading); 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; + } + } } |
