Maison >Java >javaDidacticiel >Comment appeler des méthodes dans des fragments ViewPager à partir d'une activité ?
Dans le contexte d'un ViewPager avec un balayage des doigts désactivé, la question s'est posée de savoir comment déclencher des requêtes de récupération de données dans des fragments individuels une fois qu'ils deviennent visibles après avoir glissé avec les boutons dédiés.
Approches initiales
Problème
Cependant, l'appel de la méthode sendGetRequest() à partir du fragment dans OnPageChangeListener() a conduit à une NullPointerException.
Solution
Pour résoudre le problème et conserver les références de fragment, l'adaptateur était nécessaire à refactoriser.
PagerAdapter avec références de fragment
Introduire un PagerAdapter qui contient des références à chaque fragment :
<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>
Accès au fragment from Activity
Puis, dans l'activité, au lieu de créer un nouveau fragment, utilisez celui référencé :
<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 et Kotlin
Pour ViewPager2 et Kotlin, la solution est similaire :
<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>
Remarque : Si vous utilisez différentes classes de fragments, envisagez d'implémenter une interface avec la méthode sendGetRequest() et de l'implémenter dans chaque fragment pour une solution plus propre.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!