From 5dd7c9af6d99f1a655cb9f4fd301b2de31322aef Mon Sep 17 00:00:00 2001 From: George Mount Date: Wed, 29 Mar 2017 14:56:05 -0700 Subject: [PATCH] Fix getting wrong instance when restoring non-config Bug 36679897 When restoring the non-config fragments, the wrong index was being used to lookup the fragment fromt the list of active fragment states. Test: Ic862fd9670408dab09ab5817cdec21e91aef001b Change-Id: Ic5a8e723041949e6d01d4f5ddc6d54e491143b59 --- core/java/android/app/FragmentManager.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java index 5d025d96759a1..0c1be07ab231f 100644 --- a/core/java/android/app/FragmentManager.java +++ b/core/java/android/app/FragmentManager.java @@ -2725,7 +2725,15 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate for (int i = 0; i < count; i++) { Fragment f = nonConfigFragments.get(i); if (DEBUG) Log.v(TAG, "restoreAllState: re-attaching retained " + f); - FragmentState fs = fms.mActive[f.mIndex]; + int index = 0; // index of f in fms.mActive + while (index < fms.mActive.length && fms.mActive[index].mIndex != f.mIndex) { + index++; + } + if (index == fms.mActive.length) { + throwException(new IllegalStateException("Could not find active fragment " + + "with index " + f.mIndex)); + } + FragmentState fs = fms.mActive[index]; fs.mInstance = f; f.mSavedViewState = null; f.mBackStackNesting = 0;