From 9c9df825cf6ee9df9dd8bda84994fee7d5d453e6 Mon Sep 17 00:00:00 2001 From: Accused187 Date: Fri, 20 May 2011 01:00:36 -0700 Subject: [PATCH] Added code to save the current screen to handle orientation changes or any other behaviors where the activity would be destroyed. --- .../horizontalpager/HorizontalPager.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/com/github/ysamlan/horizontalpager/HorizontalPager.java b/src/com/github/ysamlan/horizontalpager/HorizontalPager.java index 0ccc6cf..683b720 100644 --- a/src/com/github/ysamlan/horizontalpager/HorizontalPager.java +++ b/src/com/github/ysamlan/horizontalpager/HorizontalPager.java @@ -138,6 +138,22 @@ private void init() { mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); } + @Override + protected Parcelable onSaveInstanceState() { + final SavedState state = new SavedState(super.onSaveInstanceState()); + state.mCurrentScreen = mCurrentScreen; + return state; + } + + @Override + protected void onRestoreInstanceState(Parcelable state) { + SavedState savedState = (SavedState) state; + super.onRestoreInstanceState(savedState.getSuperState()); + if (savedState.mCurrentScreen != -1) { + mCurrentScreen = savedState.mCurrentScreen; + } + } + @Override protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); @@ -501,4 +517,36 @@ public static interface OnScreenSwitchListener { */ void onScreenSwitched(int screen); } + + /** + * A parcelable so we can save our current screen and return to it after an activity destroy. + */ + public static class SavedState extends BaseSavedState { + int mCurrentScreen = -1; + + SavedState(Parcelable superState) { + super(superState); + } + + private SavedState(Parcel in) { + super(in); + mCurrentScreen = in.readInt(); + } + + @Override + public void writeToParcel(Parcel out, int flags) { + super.writeToParcel(out, flags); + out.writeInt(mCurrentScreen); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public SavedState createFromParcel(Parcel in) { + return new SavedState(in); + } + + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }; + } }