Merge "Delay changing state of added fragments until all executed."

This commit is contained in:
TreeHugger Robot
2017-02-08 21:32:40 +00:00
committed by Android (Google) Code Review
2 changed files with 10 additions and 4 deletions

View File

@@ -813,8 +813,11 @@ final class BackStackRecord extends FragmentTransaction implements
/**
* Reverses the execution of the operations within this transaction. The Fragment states will
* only be modified if optimizations are not allowed.
*
* @param moveToState {@code true} if added fragments should be moved to their final state
* in unoptimized transactions
*/
void executePopOps() {
void executePopOps(boolean moveToState) {
for (int opNum = mOps.size() - 1; opNum >= 0; opNum--) {
final Op op = mOps.get(opNum);
Fragment f = op.fragment;
@@ -860,7 +863,7 @@ final class BackStackRecord extends FragmentTransaction implements
mManager.moveFragmentToExpectedState(f);
}
}
if (!mAllowOptimization) {
if (!mAllowOptimization && moveToState) {
mManager.moveToState(mManager.mCurState, true);
}
}

View File

@@ -2170,7 +2170,7 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate
if (isPop) {
record.executeOps();
} else {
record.executePopOps();
record.executePopOps(false);
}
// move to the end
@@ -2280,7 +2280,10 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate
final boolean isPop = isRecordPop.get(i);
if (isPop) {
record.bumpBackStackNesting(-1);
record.executePopOps();
// Only execute the add operations at the end of
// all transactions.
boolean moveToState = i == (endIndex - 1);
record.executePopOps(moveToState);
} else {
record.bumpBackStackNesting(1);
record.executeOps();