Heim  >  Artikel  >  Java  >  Wie rufe ich Methoden in ViewPager-Fragmenten aus der Aktivität auf?

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

DDD
DDDOriginal
2024-11-03 09:13:02854Durchsuche

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>

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>

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>

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!

Stellungnahme:
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