web-dev-qa-db-fra.com

Quand le getItem de FragmentPagerAdapter est-il appelé?

J'écris une application qui utilise le FragmentPagerAdapter. Les fragments de l'adaptateur doivent être mis à jour en fonction de données externes - mais cela ne se produit pas. J'ai remarqué que les classes de fragments ne sont instanciées qu'une seule fois, dans la fonction getItem:

@Override
public Fragment getItem(int position) {
    TabInfo info = mTabs.get(position);
    return Fragment.instantiate(mContext, info.clss.getName(),
                info.args);
}

Même si je supprime la classe et en utilise une nouvelle, rien n'y fait - cette méthode n'est appelée qu'une seule fois, la première fois que l'onglet est rempli, puis plus jamais. Quelqu'un a une idée pourquoi?

Merci!

37
n00b programmer

getItem sera appelé chaque fois que l'adaptateur a besoin d'un fragment et que le fragment n'existe pas.

Si le fragment existe déjà dans le FragmentManager, il n'est pas nécessaire de l'instancier et getItem n'a pas besoin d'être appelé.

Pour mettre à jour un fragment existant, vous devez le récupérer à partir du FragmentManager ou de l'adaptateur et le manipuler en conséquence.

Par défaut, le viewpager crée des fragments pour la page visible et celle à côté. C'est-à-dire pour commencer, les fragments en position 1 et 2. Lorsque vous glissez à la page 2, le fragment en position 3 sera créé, etc.

50
Kuffs

Pour être plus précis que la réponse ci-dessus (ce qui est correct!), GetItem est appelé par la méthode instantiateItem (conteneur ViewGroup, position int) de FragmentPagerAdapter. Juste au cas où ça aiderait :)

18
user3412580

Utilisation simple FragmentStatePagerAdapter au lieu de FragmentPagerAdapter

1
Neo