Skip to content

Commit

Permalink
Fix issue with stack triggering back on reload on Android. (#223)
Browse files Browse the repository at this point in the history
There was an issue with back stack listener being triggered after reload caused by the fact we weren't cleaning up stack manager's back stack on reload. As a result after reload listener would get triggered with and empty stack first and only then with a back stack with 1 item. Consequence of the first trigger was that we'd call dismiss and move back from the top screen which wasn't a desirable behavior.
  • Loading branch information
kmagiera committed Nov 13, 2019
1 parent 258ae41 commit 47658d4
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions android/src/main/java/com/swmansion/rnscreens/ScreenStack.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,15 @@ protected ScreenStackFragment adapt(Screen screen) {
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
getFragmentManager().removeOnBackStackChangedListener(mBackStackListener);
getFragmentManager().popBackStack(BACK_STACK_TAG, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}

@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (mTopScreen != null) {
setupBackHandlerIfNeeded(mTopScreen);
}
}

@Override
Expand Down Expand Up @@ -194,13 +203,13 @@ private void setupBackHandlerIfNeeded(ScreenStackFragment topScreen) {
}
}
if (topScreen != firstScreen && topScreen.isDismissable()) {
getFragmentManager().addOnBackStackChangedListener(mBackStackListener);
getFragmentManager()
.beginTransaction()
.hide(topScreen)
.show(topScreen)
.addToBackStack(BACK_STACK_TAG)
.commit();
.commitAllowingStateLoss();
getFragmentManager().addOnBackStackChangedListener(mBackStackListener);
}
}
}

0 comments on commit 47658d4

Please sign in to comment.