diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 1937187defed9..99b91bdf046b7 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -6873,9 +6873,11 @@ public abstract class AbsListView extends AdapterView implements Te mTransientStateViews.put(position, scrap); } else { // Otherwise, we'll have to remove the view and start over. + clearScrapForRebind(scrap); getSkippedScrap().add(scrap); } } else { + clearScrapForRebind(scrap); if (mViewTypeCount == 1) { mCurrentScrap.add(scrap); } else { @@ -7098,12 +7100,12 @@ public abstract class AbsListView extends AdapterView implements Te } } else if (params.scrappedFromPosition == position) { final View scrap = scrapViews.remove(i); - clearAccessibilityFromScrap(scrap); + clearScrapForRebind(scrap); return scrap; } } final View scrap = scrapViews.remove(size - 1); - clearAccessibilityFromScrap(scrap); + clearScrapForRebind(scrap); return scrap; } else { return null; @@ -7117,7 +7119,7 @@ public abstract class AbsListView extends AdapterView implements Te } } - private void clearAccessibilityFromScrap(View view) { + private void clearScrapForRebind(View view) { view.clearAccessibilityFocus(); view.setAccessibilityDelegate(null); } diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index 1c0c4ef7cba73..12e35a14e3814 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -1639,7 +1639,7 @@ public class ListView extends AbsListView { final View focusChild = getAccessibilityFocusedChild(focusHost); if (focusChild != null) { if (!dataChanged || isDirectChildHeaderOrFooter(focusChild) - || focusChild.hasTransientState() || mAdapterHasStableIds) { + || (focusChild.hasTransientState() && mAdapterHasStableIds)) { // The views won't be changing, so try to maintain // focus on the current host and virtual view. accessibilityFocusLayoutRestoreView = focusHost;