Skip to content

Commit e0b1a6b

Browse files
authored
Merge pull request #7149 from TacoTheDank/updateFragWorkaround
Update pager workaround code to Fragment 1.3.6
2 parents 231b749 + ed86b1c commit e0b1a6b

1 file changed

Lines changed: 21 additions & 4 deletions

File tree

app/src/main/java/androidx/fragment/app/FragmentStatePagerAdapterMenuWorkaround.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,12 @@
5151
* <li>{@link #saveState()}</li>
5252
* <li>{@link #restoreState(Parcelable, ClassLoader)}</li>
5353
* </ul>
54+
*
55+
* @deprecated Switch to {@link androidx.viewpager2.widget.ViewPager2} and use
56+
* {@link androidx.viewpager2.adapter.FragmentStateAdapter} instead.
5457
*/
5558
@SuppressWarnings("deprecation")
59+
@Deprecated
5660
public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapter {
5761
private static final String TAG = "FragmentStatePagerAdapt";
5862
private static final boolean DEBUG = false;
@@ -86,9 +90,10 @@ public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapt
8690
private final int mBehavior;
8791
private FragmentTransaction mCurTransaction = null;
8892

89-
private final ArrayList<Fragment.SavedState> mSavedState = new ArrayList<Fragment.SavedState>();
90-
private final ArrayList<Fragment> mFragments = new ArrayList<Fragment>();
93+
private final ArrayList<Fragment.SavedState> mSavedState = new ArrayList<>();
94+
private final ArrayList<Fragment> mFragments = new ArrayList<>();
9195
private Fragment mCurrentPrimaryItem = null;
96+
private boolean mExecutingFinishUpdate;
9297

9398
/**
9499
* Constructor for {@link FragmentStatePagerAdapterMenuWorkaround}
@@ -208,7 +213,7 @@ public void destroyItem(@NonNull final ViewGroup container, final int position,
208213
mFragments.set(position, null);
209214

210215
mCurTransaction.remove(fragment);
211-
if (fragment == mCurrentPrimaryItem) {
216+
if (fragment.equals(mCurrentPrimaryItem)) {
212217
mCurrentPrimaryItem = null;
213218
}
214219
}
@@ -247,7 +252,19 @@ public void setPrimaryItem(@NonNull final ViewGroup container, final int positio
247252
@Override
248253
public void finishUpdate(@NonNull final ViewGroup container) {
249254
if (mCurTransaction != null) {
250-
mCurTransaction.commitNowAllowingStateLoss();
255+
// We drop any transactions that attempt to be committed
256+
// from a re-entrant call to finishUpdate(). We need to
257+
// do this as a workaround for Robolectric running measure/layout
258+
// calls inline rather than allowing them to be posted
259+
// as they would on a real device.
260+
if (!mExecutingFinishUpdate) {
261+
try {
262+
mExecutingFinishUpdate = true;
263+
mCurTransaction.commitNowAllowingStateLoss();
264+
} finally {
265+
mExecutingFinishUpdate = false;
266+
}
267+
}
251268
mCurTransaction = null;
252269
}
253270
}

0 commit comments

Comments
 (0)