summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Adam Powell <adamp@android.com> 2013-02-22 21:29:44 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2013-02-22 21:29:44 +0000
commitd61ff77ee10b2c956df153e08b850e852ff5df57 (patch)
treeb0e0c202ebfa8dddfb8f20e1b28c48489fa4b554
parent08a92a335fd84ca427b55c6c2d39f72970d82b76 (diff)
parentdb68fac12daa2cf4a7568308995e218aed92728a (diff)
Merge "Fix ListView is not scrolled properly with arrows"
-rw-r--r--core/java/android/widget/ListView.java18
1 files changed, 15 insertions, 3 deletions
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index 69e3177e74b1..4436fbbf2a9e 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -2429,7 +2429,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
@@ -2641,14 +2643,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);
@@ -2682,6 +2688,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;