Accéder à la méthode de fragmentation ViewPager à partir de l'activité
De nombreuses applications mobiles utilisent des fragments, des composants autonomes représentant une section d'écran modulaire. La gestion de plusieurs fragments à l'aide d'un pager de visualisation permet une navigation et des animations de page fluides. Parfois, les développeurs sont confrontés à la nécessité d'effectuer des actions spécifiques au sein d'un fragment en réponse à des événements externes, tels qu'un balayage de l'utilisateur sur le pager d'affichage. Cependant, la mise en œuvre de cette fonctionnalité peut rencontrer certains défis.
Approches initiales et limitations
Initialement, une tentative a été faite pour détecter la visibilité des fragments en remplaçant la méthode setUserVisibleHint. Bien que cette approche ait fonctionné, elle a introduit un décalage notable lors des transitions de fragments.
Une approche alternative impliquait l'utilisation de OnPageChangeListener, un écouteur enregistré sur le pager d'affichage, qui offrait plus de contrôle sur le timing des actions de fragment. Cependant, la tentative d'exécution d'une méthode dans un fragment à partir de OnPageChangeListener a entraîné une NullPointerException.
Solution
La solution réside dans le maintien d'une référence à chaque instance de fragment dans le adaptateur de téléavertisseur. ViewPager fournit une méthode appelée instantiateItem qui peut être remplacée pour stocker des références de fragments dans un tableau ou une collection. Pendant l'événement onPageSelected, vous pouvez accéder à l'instance de fragment souhaitée à partir de l'adaptateur et effectuer les actions nécessaires, telles que le lancement d'une requête réseau.
Exemple de code (Java)
public class PagerAdapter extends FragmentPagerAdapter {
private Fragment[] fragments;
public PagerAdapter(FragmentManager fm, Context context) {
super(fm);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment createdFragment = (Fragment) super.instantiateItem(container, position);
fragments[position] = createdFragment;
return createdFragment;
}
}
// Within your activity that hosts view pager:
onPageChangeListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// Assuming you named your fragment FragmentTwo
Fragment frag = adapter.fragments[position];
if (frag != null && frag instanceof FragmentTwo) {
((FragmentTwo) frag).sendGetRequest();
}
}
};
Équivalent Kotlin (avec extensions Kotlin et ViewPager2)
viewPager.registerOnPageChangeCallback(
object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
val frag = mAdapter.fragments[position]
if (frag is FragmentTwo) {
frag.sendGetRequest()
}
}
}
)
Conclusion
En mettant en œuvre cette approche, vous pouvez communiquer efficacement avec des fragments de votre activité d'hébergement, permettant une intégration transparente et des expériences utilisateur améliorées au sein de vos applications mobiles.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3