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
This commit is contained in:
@@ -31628,12 +31628,10 @@ package android.widget {
|
||||
method public int getCheckedItemPosition();
|
||||
method public android.util.SparseBooleanArray getCheckedItemPositions();
|
||||
method public int getChoiceMode();
|
||||
method public int getFirstPositionForRow(int);
|
||||
method public int getListPaddingBottom();
|
||||
method public int getListPaddingLeft();
|
||||
method public int getListPaddingRight();
|
||||
method public int getListPaddingTop();
|
||||
method public int getRowForPosition(int);
|
||||
method public android.view.View getSelectedView();
|
||||
method public android.graphics.drawable.Drawable getSelector();
|
||||
method public java.lang.CharSequence getTextFilter();
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3775,13 +3775,8 @@ public class ListView extends AbsListView {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRowForPosition(int position) {
|
||||
return position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFirstPositionForRow(int row) {
|
||||
return row;
|
||||
AbsPositionScroller createPositionScroller() {
|
||||
return new ListViewPositionScroller();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -3810,4 +3805,24 @@ public class ListView extends AbsListView {
|
||||
final CollectionItemInfo itemInfo = CollectionItemInfo.obtain(0, 1, position, 1, isHeading);
|
||||
info.setCollectionItemInfo(itemInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sub-position scroller that understands the layout of a ListView.
|
||||
*/
|
||||
class ListViewPositionScroller extends AbsSubPositionScroller {
|
||||
@Override
|
||||
public int getRowForPosition(int position) {
|
||||
return position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFirstPositionForRow(int row) {
|
||||
return row;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHeightForRow(int row) {
|
||||
return getHeightForPosition(row);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user