In diesem Szenario wird ein ViewPager mit sechs Fragmenten innerhalb einer Aktivität implementiert. Das Wischen zwischen Fragmenten ist deaktiviert, daher wird eine Schaltfläche verwendet, um das aktuelle Fragment zu ändern. Eine GET-Anfrage wird an den Server gesendet und die Antwortdaten werden in jedem Fragment angezeigt, nachdem der Swipe abgeschlossen ist.
Erster Ansatz (mit setUserVisibleHint)
Zunächst wird der Die Methode setUserVisibleHint wurde verwendet, um die GET-Anfrage auszulösen, wann immer ein Fragment sichtbar wurde. Dieser Ansatz führte jedoch aufgrund der sofortigen Ausführung der Anfrage zu einer Verzögerung in der Wischanimation.
Zweiter Ansatz (Verwendung von OnPageChangeListener)
Um die Animationsverzögerung zu überwinden wurde dem ViewPager ein OnPageChangeListener hinzugefügt. Dieser Listener verfolgt den Bildlaufstatus der Seite und sendet die GET-Anfrage, wenn das gewünschte Fragment vollständig sichtbar ist (d. h. der Bildlaufstatus entspricht IDLE).
Problem und Lösung
Das Der zweite Ansatz hat gut funktioniert, aber beim Ausführen von sendGetRequest() ist eine NullPointerException aufgetreten. Der Grund dafür war, dass die Fragmentreferenz nicht ordnungsgemäß abgerufen wurde. Um dieses Problem zu beheben, mussten Verweise auf die Fragmente in der Methode „instantiateItem“ des FragmentPagerAdapters gespeichert werden. Dann könnte innerhalb des OnPageChangeListener anstelle der Erstellung eines neuen Fragments das referenzierte Fragment aus dem ViewPagerPagerAdapter verwendet werden.
Aktualisierter Code für ViewPager2 (Kotlin)
<code class="kotlin">viewPager.registerOnPageChangeCallback( object: ViewPager2.OnPageChangeCallback() { override fun onPageSelected(position: Int) { super.onPageSelected(position) val frag: Fragment = mAdapter.fragments[position] if (frag != null && frag is FragmentTwo) { (frag as FragmentTwo).sendGetRequest() } } } )</code>
Hier bezieht sich mAdapter auf den FragmentPagerAdapter, der im ViewPager2 verwendet wird.
Das obige ist der detaillierte Inhalt vonWie greife ich über eine Aktivität auf Methoden in ViewPager-Fragmenten zu und führe sie aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!