Merge "Revert "Revert "Fix ListView is not scrolled properly with arrows""" into jb-mr2-dev

This commit is contained in:
Adam Powell
2013-03-22 01:12:43 +00:00
committed by Android (Google) Code Review

View File

@@ -2431,7 +2431,9 @@ public class ListView extends AbsListView {
View selectedView = getSelectedView();
int selectedPos = mSelectedPosition;
int nextSelectedPosition = lookForSelectablePositionOnScreen(direction);
int nextSelectedPosition = (direction == View.FOCUS_DOWN) ?
lookForSelectablePosition(selectedPos + 1, true) :
lookForSelectablePosition(selectedPos - 1, false);
int amountToScroll = amountToScroll(direction, nextSelectedPosition);
// if we are moving focus, we may OVERRIDE the default behavior
@@ -2643,14 +2645,18 @@ public class ListView extends AbsListView {
final int listBottom = getHeight() - mListPadding.bottom;
final int listTop = mListPadding.top;
final int numChildren = getChildCount();
int numChildren = getChildCount();
if (direction == View.FOCUS_DOWN) {
int indexToMakeVisible = numChildren - 1;
if (nextSelectedPosition != INVALID_POSITION) {
indexToMakeVisible = nextSelectedPosition - mFirstPosition;
}
while (numChildren <= indexToMakeVisible) {
// Child to view is not attached yet.
addViewBelow(getChildAt(numChildren - 1), mFirstPosition + numChildren - 1);
numChildren++;
}
final int positionToMakeVisible = mFirstPosition + indexToMakeVisible;
final View viewToMakeVisible = getChildAt(indexToMakeVisible);
@@ -2684,6 +2690,12 @@ public class ListView extends AbsListView {
if (nextSelectedPosition != INVALID_POSITION) {
indexToMakeVisible = nextSelectedPosition - mFirstPosition;
}
while (indexToMakeVisible < 0) {
// Child to view is not attached yet.
addViewAbove(getChildAt(0), mFirstPosition);
mFirstPosition--;
indexToMakeVisible = nextSelectedPosition - mFirstPosition;
}
final int positionToMakeVisible = mFirstPosition + indexToMakeVisible;
final View viewToMakeVisible = getChildAt(indexToMakeVisible);
int goalTop = listTop;