Ermitteln Sie, welches Fragment in ViewPager gerade sichtbar ist

8

Ich habe ViewPager , das ich für die Anzeige von wenigen Fragmenten verwende, ich habe auch TextView auf meinem FragmentActivity . Ich muss den Text in TextView ändern, abhängig davon, welches Fragment momentan in ViewPager ausgewählt ist. Das Problem, dem ich begegnet bin: ViewPager hat einen Caching-Mechanismus, es instantiiert Fragmente, bevor sie für den Benutzer sichtbar sind, zum Beispiel wenn ich die zweite Seite in ViewPager fragment auf der dritten Seite wähle. Was mehr ist, kann ich nicht inneres Fragment feststellen ist dieses Fragment sichtbar jetzt oder es wird gerade von ViewPager geschaffen, aber nicht wirklich sichtbar für Benutzer. Ich habe versucht, OnPageChangeListener dafür zu verwenden, aber die darin vorgenommenen Änderungen waren für mich inakzeptabel langsam (die Seite blätterte und dann änderte sich mein TextView )

Was ich eigentlich brauche: Ich muss feststellen, welches Fragment momentan in ViewPager sichtbar ist, egal von FragmentActivity oder von Fragment selbst. Wie kann ich das erreichen?

    
Bersh 25.04.2013, 17:36
quelle

1 Antwort

7

ViewPager.OnPageChangeListener ist der offensichtliche Ansatz hier. Und wie Sie bemerkt haben, wird onPageSelected(int position) erst aufgerufen, wenn die Seite zentriert ist (wenn Sie die Seite langsam scrollen, indem Sie berühren und gedrückt halten).

  

Was ich eigentlich brauche: Ich muss herausfinden, welches Fragment momentan in ViewPager sichtbar ist, egal ob es sich um FragmentAktivity oder um Fragment selbst handelt. Wie kann ich das erreichen?

Zuerst haben Sie "derzeit sichtbar" nicht definiert. In einem ViewPager können beide Seiten beim Streichen zwischen ihnen gesehen werden, also welche ist "derzeit sichtbar" mitten im Streichen? Meine Annahme ist, dass Sie überlegen würden, welche Seite "besser sichtbar" ist, "aktuell sichtbar".

Nachdem ich das gesagt habe, würde ich mir die Verwendung von onPageScrolled (int position, float positionOffset, int positionOffsetPixels) . Es scheint, dass positionOffset möglicherweise in der Lage ist, Ihnen die Informationen zu geben, die Sie benötigen. Ich würde es mit einigen Logging-Anweisungen testen, um zu sehen, welche Daten zurückgeben.

    
Steven Byle 25.04.2013, 17:58
quelle