2

Kurzversion:NestedScrolling in einem Viewpager in einer BottomSheetDialog

Wie stelle ich die NestedScrollingChild ein NestedScrollingParent mit mehrere Anzahl solchen Kind.

Lange Version

implementiert ich ein BottomSheetDialogFragment, dessen Layout besteht aus einem ViewPager, und der Adapter dieses viewpager enthält ein RecyclerView.

Nun ist die Frage, da ein NestedScrollingParent, die in dieser Zeit der Koordinator Layout der bottomsheet nur ein direkteNestedScrollingChild unterstützt, nur das erste Fragment des Adapters kann Nest gescrollt werden.

Was ich meine ist, wenn setAdapter auf den Viewpager aufgerufen wird, unterstützt das erste Element geschachteltes Scrollen. Aber nachdem ich die Seite gewechselt habe, scrollt die neue Seite nicht mehr. Wenn ich dann zur vorherigen Seite zurückkehre, unterstützt es immer noch das Scrollen.

Außerdem bemerkte ich, dass, wenn das Fragment oder die Seite, die scrollen kann, zerstört wird, die nachfolgende Seite jetzt scrollen kann, was bedeutet, dass die letzte Seite das untergeordnete Blatt des unteren Blattes wird. Das Problem ist, dass die Seite, die jetzt die Fähigkeit zum Scrollen bekommen hat, nicht das aktuelle Element ist, sondern ein vorhergehendes (mein Adapter muss 3 Fragmente enthalten).

Zusammenfassung:

Nach setAdapter

  • Fragment 0 blättern
  • dann nach Seite Ändern 1 fragmentieren, Fragment 1 nicht bewegen
  • aber schaltend 2 fragmentieren, dann gehen zurück zu Fragment 1 erlaubt Fragment 1 zu scrollen (da Fragment 0 zerstört wird, denke ich)

Antwort

0

Nach dem Graben in den Quellcode, stellte ich fest, dass das Problem auf einem fehlerhaften Algorithmus bei der Suche nach der NestedScrollingChild der Unterseite (Leute bei Google hat nicht die Möglichkeit einer ViewPager in der unteren Seite berücksichtigt) liegt.

Siehe Methode hier: findScrollingChild()

Was diese Methode tut, ist es das erste NestedScrollingChild zurückkehren wird es auf eine bestimmte Ansicht (die bottomsheet in diesem Fall) trifft, die im Falle eines viewpager mit 3 Seiten, dasjenige, das der aktuellen Seite vorausgeht. Außerdem wird diese Methode während der Layout-Phase der Kinder der CoordinatorLayout Wrapper der Unterseite ausgelöst.

In diesem Sinne kann man viele Lösungen entwickeln, einschließlich Unterklassen des Verhaltens selbst.

Auch kann man die NestedScrollingChild innerhalb der Viewpager durch Hinzufügen und Entfernen einer Instanz eines solchen Kind (von der alten Seite entfernen, dann in der aktuellen Seite hinzufügen), was ich getan habe. Sie können dies innerhalb setPrimaryItem des Adapters oder auf einem OnPageChangeListener tun.Achten Sie darauf, requestLayout auf dem Koordinator Layout der Unterseite zu nennen. (Diese Lösung hängt von der Art des Layouts/der Struktur des Pager-Adapters ab, so dass ich meine genaue Lösung nicht posten werde).

0

Auch ich lief dieses Problem, indem ich versuchte, einen ViewPager mit Scroll-Ansichten auf fast jeder Seite innerhalb eines BottomSheetDialogs zu verwenden. Ich fand diese Lösung von laenger ([https://github.com/laenger/ViewPagerBottomSheet][1]), und nahm es so, dass es stattdessen mit einem BottomSheetDialog passt. Hoffe, es kann helfen, einige, die in die gleiche Frage läuft :)

Verwandte Themen