Wie rufe ich Methoden in ViewPager-Fragmenten aus der Aktivität auf?
Aufrufen von ViewPager-Fragmentmethoden aus der Aktivität
Im Kontext eines ViewPagers mit deaktiviertem Fingerwischen stellte sich die Frage, wie man Datenabrufanfragen in einzelnen Fragmenten auslösen kann, sobald diese vorhanden sind werden nach dem Wischen mit den entsprechenden Schaltflächen sichtbar.
Erste Ansätze
- setUserVisibleHint(): Ursprünglich verwendet, führte jedoch zu Verzögerungen bei Animationen beteiligt.
- OnPageChangeListener(): Besserer Ansatz, der Seitenänderungen erfolgreich überwacht.
Problem
Allerdings Der Aufruf der sendGetRequest()-Methode aus dem Fragment innerhalb von OnPageChangeListener() führte zu einer NullPointerException.
Lösung
Um das Problem zu beheben und Fragmentverweise beizubehalten, war der Adapter erforderlich umgestaltet werden.
PagerAdapter mit Fragmentreferenzen
Führen Sie einen PagerAdapter ein, der Referenzen auf jedes Fragment enthält:
<code class="java">class PagerAdapter extends FragmentPagerAdapter { public Fragment[] fragments; // Instantiate fragments and add to array @Override public Object instantiateItem(ViewGroup container, int position) { Fragment createdFragment = (Fragment) super.instantiateItem(container, position); fragments[position] = createdFragment; return createdFragment; } }</code>
Zugriff auf Fragment aus der Aktivität
Anstatt dann in der Aktivität ein neues Fragment zu erstellen, verwenden Sie das referenzierte:
<code class="java">viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { Fragment frag = mAdapter.fragments[position]; if (frag != null && frag instanceof FragmentTwo) { ((FragmentTwo)frag).sendGetRequest(); } } });</code>
ViewPager2 und Kotlin
Für ViewPager2 und Kotlin ist die Lösung ähnlich:
<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>
Hinweis: Wenn Sie unterschiedliche Fragmentklassen verwenden, sollten Sie erwägen, eine Schnittstelle mit der sendGetRequest()-Methode zu implementieren und diese in zu implementieren jedes Fragment für eine sauberere Lösung.
Das obige ist der detaillierte Inhalt vonWie rufe ich Methoden in ViewPager-Fragmenten aus der Aktivität auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Top 4 JavaScript -Frameworks in 2025: React, Angular, Vue, Svelte

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache?

Node.js 20: wichtige Leistungssteigerung und neue Funktionen

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle?

ICEBERG: Die Zukunft von Data Lake Tabellen

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Problem behoben

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden?

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung?
