diff options
author | Adam Powell <adamp@android.com> | 2012-10-23 15:01:43 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-10-23 15:01:43 -0700 |
commit | a23f69a8782e0edeff815cfb5275f2864fc1d19e (patch) | |
tree | ff2e1cc77e967aa983b8786b1834d785653c22a8 | |
parent | 265fcd2f85679ddbb2c89d6d517b4a55c1c7306e (diff) | |
parent | 86e0d95de1007d339af467c1484b09878ee528fc (diff) | |
download | frameworks_base-a23f69a8782e0edeff815cfb5275f2864fc1d19e.zip frameworks_base-a23f69a8782e0edeff815cfb5275f2864fc1d19e.tar.gz frameworks_base-a23f69a8782e0edeff815cfb5275f2864fc1d19e.tar.bz2 |
am 86e0d95d: Merge "Reattach header view after DPAD scroll."
* commit '86e0d95de1007d339af467c1484b09878ee528fc':
Reattach header view after DPAD scroll.
-rw-r--r-- | core/java/android/widget/ListView.java | 8 | ||||
-rw-r--r-- | core/tests/coretests/src/android/widget/listview/focus/ListWithEditTextHeaderTest.java | 19 |
2 files changed, 21 insertions, 6 deletions
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index 03507b5..69e3177 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -2981,11 +2981,9 @@ public class ListView extends AbsListView { while (first.getBottom() < listTop) { AbsListView.LayoutParams layoutParams = (LayoutParams) first.getLayoutParams(); if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) { - detachViewFromParent(first); recycleBin.addScrapView(first, mFirstPosition); - } else { - removeViewInLayout(first); } + detachViewFromParent(first); first = getChildAt(0); mFirstPosition++; } @@ -3012,11 +3010,9 @@ public class ListView extends AbsListView { while (last.getTop() > listBottom) { AbsListView.LayoutParams layoutParams = (LayoutParams) last.getLayoutParams(); if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) { - detachViewFromParent(last); recycleBin.addScrapView(last, mFirstPosition+lastIndex); - } else { - removeViewInLayout(last); } + detachViewFromParent(last); last = getChildAt(--lastIndex); } } diff --git a/core/tests/coretests/src/android/widget/listview/focus/ListWithEditTextHeaderTest.java b/core/tests/coretests/src/android/widget/listview/focus/ListWithEditTextHeaderTest.java index b9051e9..532b9d1 100644 --- a/core/tests/coretests/src/android/widget/listview/focus/ListWithEditTextHeaderTest.java +++ b/core/tests/coretests/src/android/widget/listview/focus/ListWithEditTextHeaderTest.java @@ -22,6 +22,7 @@ import android.test.TouchUtils; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; import android.view.KeyEvent; +import android.view.View; import android.widget.AbsListView; import android.widget.ListView; import android.widget.listview.ListWithEditTextHeader; @@ -63,4 +64,22 @@ public class ListWithEditTextHeaderTest extends ActivityInstrumentationTestCase2 assertTrue("header does not have focus", mListView.getChildAt(0).isFocused()); assertEquals("something is selected", AbsListView.INVALID_POSITION, mListView.getSelectedItemPosition()); } + + @LargeTest + public void testScrollingDoesNotDetachHeaderViewFromWindow() { + View header = mListView.getChildAt(0); + assertNotNull("header is not attached to a window (?!)", header.getWindowToken()); + + // Scroll header off the screen and back onto the screen + int numItemsOnScreen = mListView.getChildCount(); + for (int i = 0; i < numItemsOnScreen; i++) { + sendKeys(KeyEvent.KEYCODE_DPAD_DOWN); + } + for (int i = 0; i < numItemsOnScreen; i++) { + sendKeys(KeyEvent.KEYCODE_DPAD_UP); + } + + // Make sure the header was not accidentally left detached from its window + assertNotNull("header has lost its window", header.getWindowToken()); + } } |