From 5f36c96f6d3623a826466db68cc1586f078ac307 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Thu, 26 Aug 2010 15:54:17 -0700 Subject: [PATCH] Fix issue #2950374: Fragment#setHasOptionsMenu() doesn't work... ...when it is called before the parent Activity becomes ready. Change-Id: Id021564ebb3419353234e459b7358b9a72660715 --- core/java/android/app/BackStackEntry.java | 14 ++++---------- core/java/android/app/FragmentManager.java | 15 +++++++++------ 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/core/java/android/app/BackStackEntry.java b/core/java/android/app/BackStackEntry.java index 520e4fd586dd3..00c2fc476900b 100644 --- a/core/java/android/app/BackStackEntry.java +++ b/core/java/android/app/BackStackEntry.java @@ -410,17 +410,13 @@ final class BackStackEntry implements FragmentTransaction, Runnable { mManager.moveToState(mManager.mCurState, mTransition, mTransitionStyle, true); - if (mManager.mNeedMenuInvalidate && mManager.mActivity != null) { - mManager.mActivity.invalidateOptionsMenu(); - mManager.mNeedMenuInvalidate = false; - } if (mAddToBackStack) { mManager.addBackStackState(this); } } - public void popFromBackStack() { + public void popFromBackStack(boolean doStateMove) { if (FragmentManagerImpl.DEBUG) Log.v(TAG, "popFromBackStack: " + this); bumpBackStackNesting(-1); @@ -472,11 +468,9 @@ final class BackStackEntry implements FragmentTransaction, Runnable { op = op.prev; } - mManager.moveToState(mManager.mCurState, - FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle, true); - if (mManager.mNeedMenuInvalidate && mManager.mActivity != null) { - mManager.mActivity.invalidateOptionsMenu(); - mManager.mNeedMenuInvalidate = false; + if (doStateMove) { + mManager.moveToState(mManager.mCurState, + FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle, true); } if (mIndex >= 0) { diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java index c63233e4b6493..7641f619745de 100644 --- a/core/java/android/app/FragmentManager.java +++ b/core/java/android/app/FragmentManager.java @@ -511,6 +511,11 @@ final class FragmentManagerImpl implements FragmentManager { moveToState(f, newState, transit, transitStyle); } } + + if (mNeedMenuInvalidate && mActivity != null) { + mActivity.invalidateOptionsMenu(); + mNeedMenuInvalidate = false; + } } } @@ -800,9 +805,7 @@ final class FragmentManagerImpl implements FragmentManager { enqueueAction(new Runnable() { public void run() { if (DEBUG) Log.v(TAG, "Popping back stack state: " + bss); - bss.popFromBackStack(); - moveToState(mCurState, reverseTransit(bss.getTransition()), - bss.getTransitionStyle(), true); + bss.popFromBackStack(true); } }); } else { @@ -848,11 +851,11 @@ final class FragmentManagerImpl implements FragmentManager { } enqueueAction(new Runnable() { public void run() { - for (int i=0; i