From cf3811052672f197916644e7fda526524b506bb1 Mon Sep 17 00:00:00 2001 From: Andrei Stingaceanu Date: Mon, 25 Apr 2016 14:17:37 +0100 Subject: [PATCH] Fix ListView losing scroll position Restrict restoring the selected position when AdapterView gets restored for Spinner instances only. Bug: 26991402 Bug: 23619366 Change-Id: Ib002eac5ed0b8810a3e9988ad36f03450cb03b9b --- core/java/android/widget/AbsSpinner.java | 12 ++++++++++-- core/java/android/widget/AdapterView.java | 1 - 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/core/java/android/widget/AbsSpinner.java b/core/java/android/widget/AbsSpinner.java index 1cb7f2ac60b1c..18db54ec5da04 100644 --- a/core/java/android/widget/AbsSpinner.java +++ b/core/java/android/widget/AbsSpinner.java @@ -356,10 +356,18 @@ public abstract class AbsSpinner extends AdapterView { return mFirstPosition + i; } } - } + } return INVALID_POSITION; } - + + @Override + protected void dispatchRestoreInstanceState(SparseArray container) { + super.dispatchRestoreInstanceState(container); + // Restores the selected position when Spinner gets restored, + // rather than wait until the next measure/layout pass to do it. + handleDataChanged(); + } + static class SavedState extends BaseSavedState { long selectedId; int position; diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java index 6ed7ab8fde68b..2cfefba10c573 100644 --- a/core/java/android/widget/AdapterView.java +++ b/core/java/android/widget/AdapterView.java @@ -815,7 +815,6 @@ public abstract class AdapterView extends ViewGroup { @Override protected void dispatchRestoreInstanceState(SparseArray container) { dispatchThawSelfOnly(container); - handleDataChanged(); } class AdapterDataSetObserver extends DataSetObserver {