Maison  >  Article  >  Java  >  Comment appeler des méthodes dans des fragments ViewPager à partir d’une activité ?

Comment appeler des méthodes dans des fragments ViewPager à partir d’une activité ?

DDD
DDDoriginal
2024-11-03 09:13:02856parcourir

How to Call Methods in ViewPager Fragments from Activity?

Appel des méthodes de fragmentation ViewPager à partir de l'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

  1. setUserVisibleHint() : initialement utilisé mais entraînait un décalage lorsque les animations étaient impliqué.
  2. OnPageChangeListener() : meilleure approche qui surveille les modifications de page avec succès.

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 &amp;&amp; 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 &amp;&amp; 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn