callstack / callstack/react-native-pager-view

ViewPager layout breaks when detaching and attaching it again

Offen
#122 4 Kommentare 7 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
android bug
Vorherrschende Sprache
TypeScript
Sterne
3.4k
Forks
476
Ø Merge
10 T. 21 Std.
Gemergte PRs (30 T.)
2

Beschreibung

## Environment info

```sh
react-native: 0.61.5
```

Library version: `3.2.0`

## Steps To Reproduce

See the issue:

![pager-detach-broken](https://user-images.githubusercontent.com/774577/70314278-72597080-1817-11ea-85d8-49f9945809e4.gif)

## 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:

```java
@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 😄 .

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginnen Sie mit android/src/main/java/com/reactnativecommunity/viewpager/ReactViewPager.java in den verlinkten Zeilen und reproduzieren Sie den detach/attach-Ablauf mithilfe des bereitgestellten react-native-viewpager-detach-example. Vergleichen Sie das bestehende Verhalten von onAttachedToWindow mit der gemeldeten measure-and-layout-Sequenz; abgeschlossen ist die Aufgabe, wenn der ViewPager nach dem Wegnavigieren und Zurückkehren weiterhin korrekt angeordnet ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
android, java, react-native
Bereich
mobile-dev
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
38/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.