Skip to content

Commit

Permalink
Fix Viewpager on Android when using native navigation.
Browse files Browse the repository at this point in the history
Summary:
See the "broken" video attached to really understand the problem easily.

On Android after navigating to any other screen using wix navigation library, the native viewpager would lose the settling page behaviour which is quite annoying for the users.

This is caused by the onAttachedToWindow that resets mFirstLayout to true inside ViewPager. By request another layout pass, everything works as expected.

Working video is the application with patched RN.

[broken.mp4](https://github.com/facebook/react-native/files/1128028/broken.mp4.zip)
[working.mp4](https://github.com/facebook/react-native/files/1128032/working.mp4.zip)
Closes #14867

Differential Revision: D7154981

Pulled By: hramos

fbshipit-source-id: 2b3570800a5320ed2c12c488748d9e1358936c84
  • Loading branch information
ruiaraujo authored and facebook-github-bot committed Mar 5, 2018
1 parent 498cf7e commit a1295e1
Showing 1 changed file with 20 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,26 @@ public void setScrollEnabled(boolean scrollEnabled) {
mScrollEnabled = scrollEnabled;
}


@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
// The viewpager reset an internal flag on this method so we need to run another layout pass
// after attaching to window.
this.requestLayout();
post(measureAndLayout);
}

private final Runnable measureAndLayout = new Runnable() {
@Override
public void run() {
measure(
MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));
layout(getLeft(), getTop(), getRight(), getBottom());
}
};

/*package*/ void addViewToAdapter(View child, int index) {
getAdapter().addView(child, index);
}
Expand Down

0 comments on commit a1295e1

Please sign in to comment.