ViewPager addOnPageChangeListener ne fonctionne pas sur le même tabClick
J'ai un ViewPager
avec addOnPageChangeListener
. ViewPager
a 3 tabviews (tab1, tab2, tab3). Lorsqu'un utilisateur clique sur tab2, il charge des données (Essentiellement un RecyclerView
). En ce moment, si l'utilisateur clique sur tab2, j'ai besoin de recharger les données, mais dans ce cas addOnPageChangeListener
n'est pas déclenché.
Mon Code:
customPagerAdapter = new CustomPagerAdapter(getSupportFragmentManager(), MainActivity.this);
viewPager.setAdapter(customPagerAdapter);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {
}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
public void onPageSelected(int position) {
Log.i("TAG", "position: " + position);
switch (position) {
case 0:
addingMarker(LocationData.find(LocationData.class, "Category = ? ", "1"));
break;
case 1:
addingMarker(LocationData.find(LocationData.class, "Category = ? ", "2"));
break;
case 2:
addingMarker(LocationData.find(LocationData.class, "Category = ? ", "3"));
break;
}
}
});
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setupWithViewPager(viewPager);
OnPageChangeListener
est déclenché lorsque "la page est modifié". Êtes-vous à l'aide deTabLayout
pour les onglets?- Oui, je suis en utilisant tablayout
- Mis à jour mon code s'il vous plaît vérifier'
Vous devez vous connecter pour publier un commentaire.
Réponse Originale À Cette Question:
L'Android de l'équipe a changé quelques petites choses sur la façon TabLayout et ViewPager parler les uns aux autres. Lire les docs. Mais les choses ne sont pas bien expliqués. J'ai inclus beaucoup de commentaires dans le code. J'espère que ça aide.
Découvrez ce question si vous avez d'autres problèmes.
EDIT 1: décembre 2015
Pas une solution à cette question, mais utile en général.
De cette façon, vous n'avez pas besoin de s'inquiéter à propos de la définition du fragment-vous lorsqu'un onglet est sélectionné.
tabLayout.setOnTabSelectedListener(..)
n'est plus nécessaire dans cette situation. Qui est gérée sous le capot. Ceci est utile lorsque vous n'avez pas besoin de trop de contrôle sur vos onglets(comme le rechargement fragment quand même onglet est sélectionné/taraudés).MISE À JOUR: MAI 2018
Les deux fonctions ci-dessus sont obsolètes. Initialiser viewpager+tablayout comme indiqué ci-dessous:
Il semble que votre
onPageSelected
de rappel n'est pas appelé parce que la page n'est pas réellement en train de changer. Je pense que si vous écrivez une sous-classe personnalisée deTabLayout.ViewPagerOnTabSelectedListener
, vous pouvez utiliser leonTabReselected
de rappel pour déclencher votre actualiser même ceux de la page sélectionnée, l'indice n'a pas changé.Vous devriez être en mesure d'installer votre personnalisé
OnTabSelectedListener
à l'aide deTabLayout::setOnTabSelectedListener
après vous appelezsetupWithViewPager
.