From e7fea45863afb10335cb7845aebcf2907d3c3e41 Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Thu, 18 Mar 2010 14:51:39 -0700 Subject: Fix bug 2520540 PreferenceActivity will now persist view hierarchy state properly. Change-Id: I4e7fe036d0d0bced78e58e2a15808facf502e449 --- core/java/android/preference/PreferenceActivity.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'core/java/android/preference') diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java index 837ce91..726793d 100644 --- a/core/java/android/preference/PreferenceActivity.java +++ b/core/java/android/preference/PreferenceActivity.java @@ -24,7 +24,6 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; -import android.view.Window; /** * Shows a hierarchy of {@link Preference} objects as @@ -81,6 +80,8 @@ public abstract class PreferenceActivity extends ListActivity implements private PreferenceManager mPreferenceManager; + private Bundle mSavedInstanceState; + /** * The starting request code given out to preference framework. */ @@ -137,15 +138,19 @@ public abstract class PreferenceActivity extends ListActivity implements @Override protected void onRestoreInstanceState(Bundle state) { - super.onRestoreInstanceState(state); - Bundle container = state.getBundle(PREFERENCES_TAG); if (container != null) { final PreferenceScreen preferenceScreen = getPreferenceScreen(); if (preferenceScreen != null) { preferenceScreen.restoreHierarchyState(container); + mSavedInstanceState = state; + return; } } + + // Only call this if we didn't save the instance state for later. + // If we did save it, it will be restored when we bind the adapter. + super.onRestoreInstanceState(state); } @Override @@ -176,6 +181,10 @@ public abstract class PreferenceActivity extends ListActivity implements final PreferenceScreen preferenceScreen = getPreferenceScreen(); if (preferenceScreen != null) { preferenceScreen.bind(getListView()); + if (mSavedInstanceState != null) { + super.onRestoreInstanceState(mSavedInstanceState); + mSavedInstanceState = null; + } } } -- cgit v1.1