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
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!