Fix bug 2520540

PreferenceActivity will now persist view hierarchy state properly.

Change-Id: I4e7fe036d0d0bced78e58e2a15808facf502e449
This commit is contained in:
Adam Powell
2010-03-18 14:51:39 -07:00
parent f298a027ed
commit e7fea45863

View File

@@ -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;
}
}
}