Heim > Java > javaLernprogramm > Hauptteil

Wie rufe ich Methoden in ViewPager-Fragmenten aus der Aktivität auf?

DDD
Freigeben: 2024-11-03 09:13:02
Original
854 Leute haben es durchsucht

How to Call Methods in ViewPager Fragments from Activity?

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

  1. setUserVisibleHint(): Ursprünglich verwendet, führte jedoch zu Verzögerungen bei Animationen beteiligt.
  2. 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>
Nach dem Login kopieren

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 &amp;&amp; frag instanceof FragmentTwo) {
            ((FragmentTwo)frag).sendGetRequest();
        }
    }
});</code>
Nach dem Login kopieren

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 &amp;&amp; frag is FragmentTwo) {
                (frag as FragmentTwo).sendGetRequest()
            }
        }
    }
)</code>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!