Heim  >  Artikel  >  Java  >  Wie rufe ich eine Fragment-Methode von einem ViewPager OnPageChangeListener ohne eine NullPointerException auf?

Wie rufe ich eine Fragment-Methode von einem ViewPager OnPageChangeListener ohne eine NullPointerException auf?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 09:08:29537Durchsuche

How to Call a Fragment Method from a ViewPager OnPageChangeListener Without a NullPointerException?

Auf die ViewPager-Fragmentmethode über die Aktivität zugreifen

In Ihrem Szenario haben Sie einen ViewPager mit mehreren Fragmentinstanzen und möchten einen GET ausführen Fordern Sie die abgerufenen Daten an und zeigen Sie sie in einem Fragment an, wenn sie nach dem Wischen sichtbar werden.

Erster Ansatz: setUserVisibleHint

Die Verwendung von setUserVisibleHint ist nicht ideal, da die Anforderung sofort ausgelöst wird, wenn Das Fragment wird sichtbar und unterbricht die reibungslose Animation des Wischens.

Zweiter Ansatz: OnPageChangeListener

OnPageChangeListener bietet einen geeigneteren Ansatz. Beim Versuch, sendGetRequest() in der onPageScrollStateChanged-Methode aufzurufen, tritt jedoch eine NullPointerException auf.

Lösung

Die NullPointerException tritt auf, weil Sie versuchen, den Kontext aus zu verwenden Der OnPageChangeListener von ViewPager innerhalb des Fragments. Der Kontext ist in diesem Fall die MainActivity, die für die Operationen des Fragments nicht geeignet ist.

Um dieses Problem zu beheben, müssen Sie stattdessen einen Verweis auf den Kontext des Fragments übergeben. Hier ist der überarbeitete OnPageChangeListener:

<code class="java">viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    int currentPosition = 0;

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }

    @Override
    public void onPageSelected(int position) {
        currentPosition = position;
    }

    @Override
    public void onPageScrollStateChanged(int state) {
        if (state == ViewPager.SCROLL_STATE_IDLE && currentPosition != 0) {
            try {
                Fragment fragment = mAdapter.fragments[currentPosition];
                if (fragment != null && fragment instanceof FragmentTwo) {
                    ((FragmentTwo) fragment).sendGetRequest();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
});</code>

In diesem Code verwenden wir das Fragment-Array des FragmentAdapters, um einen Verweis auf das Fragment an der aktuellen Position zu erhalten. Anschließend wandeln wir das Fragment in den entsprechenden Typ um (in diesem Fall FragmentTwo) und rufen seine sendGetRequest()-Methode auf.

Mit diesem Ansatz können Sie die GET-Anfrage auslösen und die abgerufenen Daten anschließend im gewünschten Fragment anzeigen Die Wischanimation läuft reibungslos ab.

Das obige ist der detaillierte Inhalt vonWie rufe ich eine Fragment-Methode von einem ViewPager OnPageChangeListener ohne eine NullPointerException 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
Vorheriger Artikel:Eintauchen in ein Java-ProjektNächster Artikel:Eintauchen in ein Java-Projekt