Skip to content

ViewPager layout breaks when detaching and attaching it again #122

@ferrannp

Description

@ferrannp

Environment info

react-native: 0.61.5

Library version: 3.2.0

Steps To Reproduce

See the issue:

pager-detach-broken

Reproducible sample code

Repro: https://github.com/ferrannp/react-native-viewpager-detach-example

When navigating to another screen with react-navigation (e.g to another tab), onDetachedFromWindow is called. When we come back to the view that has the ViewPager, this code is called:

https://github.com/react-native-community/react-native-viewpager/blob/master/android/src/main/java/com/reactnativecommunity/viewpager/ReactViewPager.java#L212-L219

However, it seems to be called too late and the Pager gets broken. I tried the following solution:

  @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();
    // CODE CHANGES BELOW
    measure(
            MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),
            MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));
    layout(getLeft(), getTop(), getRight(), getBottom());
  }

And it works. However, I am not sure this is the best solution. I know @kmagiera did something similar before with Pager so I am just CCing you here. Maybe @satya164 @NoemiRozpara you found this before when working with react-navigation and ViewPager? I'll also CC @ruiaraujo which implemented this piece of code 2 years ago 😄 .

Metadata

Metadata

Assignees

No one assigned

    Labels

    androidbugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions