diff options
Diffstat (limited to 'core/java/android/app/BackStackEntry.java')
| -rw-r--r-- | core/java/android/app/BackStackEntry.java | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/core/java/android/app/BackStackEntry.java b/core/java/android/app/BackStackEntry.java index c958e2611f1e..729143834091 100644 --- a/core/java/android/app/BackStackEntry.java +++ b/core/java/android/app/BackStackEntry.java @@ -27,6 +27,7 @@ final class BackStackState implements Parcelable { final int mTransition; final int mTransitionStyle; final String mName; + final int mIndex; public BackStackState(FragmentManager fm, BackStackEntry bse) { int numRemoved = 0; @@ -58,6 +59,7 @@ final class BackStackState implements Parcelable { mTransition = bse.mTransition; mTransitionStyle = bse.mTransitionStyle; mName = bse.mName; + mIndex = bse.mIndex; } public BackStackState(Parcel in) { @@ -65,6 +67,7 @@ final class BackStackState implements Parcelable { mTransition = in.readInt(); mTransitionStyle = in.readInt(); mName = in.readString(); + mIndex = in.readInt(); } public BackStackEntry instantiate(FragmentManager fm) { @@ -90,6 +93,7 @@ final class BackStackState implements Parcelable { bse.mTransition = mTransition; bse.mTransitionStyle = mTransitionStyle; bse.mName = mName; + bse.mIndex = mIndex; return bse; } @@ -102,6 +106,7 @@ final class BackStackState implements Parcelable { dest.writeInt(mTransition); dest.writeInt(mTransitionStyle); dest.writeString(mName); + dest.writeInt(mIndex); } public static final Parcelable.Creator<BackStackState> CREATOR @@ -151,6 +156,7 @@ final class BackStackEntry implements FragmentTransaction, Runnable { boolean mAddToBackStack; String mName; boolean mCommitted; + int mIndex; public BackStackEntry(FragmentManager manager) { mManager = manager; @@ -289,16 +295,28 @@ final class BackStackEntry implements FragmentTransaction, Runnable { return this; } - public void commit() { + public int commit() { if (mCommitted) throw new IllegalStateException("commit already called"); if (FragmentManager.DEBUG) Log.v(TAG, "Commit: " + this); mCommitted = true; + if (mAddToBackStack) { + mIndex = mManager.allocBackStackIndex(this); + } else { + mIndex = -1; + } mManager.enqueueAction(this); + return mIndex; } public void run() { if (FragmentManager.DEBUG) Log.v(TAG, "Run: " + this); + if (mAddToBackStack) { + if (mIndex < 0) { + throw new IllegalStateException("addToBackStack() called after commit()"); + } + } + Op op = mHead; while (op != null) { switch (op.cmd) { @@ -450,6 +468,11 @@ final class BackStackEntry implements FragmentTransaction, Runnable { mManager.mActivity.invalidateOptionsMenu(); mManager.mNeedMenuInvalidate = false; } + + if (mIndex >= 0) { + mManager.freeBackStackIndex(mIndex); + mIndex = -1; + } } public String getName() { |
