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!