71 votes

réutilisation des fragments dans un adaptateur de fragmentation

J'ai un viewpager qui pagine à travers des fragments. Mon site FragmentPagerAdapter crée un nouveau fragment dans le getItem ce qui semble être un gaspillage. Existe-t-il une FragmentPagerAdapter équivalent à l convertView dans le listAdapter qui me permettra de réutiliser des fragments déjà créés ? Mon code est le suivant.

public class ProfilePagerAdapter extends FragmentPagerAdapter {

    ArrayList<Profile> mProfiles = new ArrayList<Profile>();

    public ProfilePagerAdapter(FragmentManager fm) {
        super(fm);
    }

    /**
     * Adding a new profile object created a new page in the pager this adapter is set to.
     * @param profile
     */
    public void addProfile(Profile profile){
        mProfiles.add(profile);
    }

    @Override
    public int getCount() {
        return mProfiles.size();
    }

    @Override
    public Fragment getItem(int position) {
        return new ProfileFragment(mProfiles.get(position));
    }
}

0voto

floating Points 1

Je pense que le post de Geoff n'est pas une solution.

La valeur par défaut getOffscreenPageLimit() == 1 ce qui signifie que le FragmentStatePagerAdapter retiendrait (cache) une page de chaque côté de la page actuelle. Ainsi, si vous vous trouvez d'abord à la page 2, la page FragmentStatePagerAdapter vous aide à mettre en cache les pages 1 et 3. Mais quand vous faites défiler rapidement la page 4, FragmentStatePagerAdapter détruirait la page 1 et mettrait en cache la page 5 (en fait FragmentStatePagerAdapter conservera 4 fragments maximum, si vous faites défiler la page 3, la page 1 existera toujours, je suppose qu'il faut un certain temps pour la détruire).

Donc en fait FragmentStatePagerAdapter la mise en cache d'un fragment d'un côté ou de l'autre dépendrait de setOffscreenPageLimit() mais ne vous aide pas à réutiliser ces fragments.

J'ai une application qui utilise RetainedFragment pour gérer le changement d'orientation, parce que RetainedFragment est attaché à Activity, donc si vous ne les avez pas détruits dans FragmentStatePagerAdapter#destroyItem(ViewGroup, int, Object) cela provoquerait des fuites de mémoire.

0voto

Sabo Points 308

Je sais que ce n'est pas (théoriquement) une réponse à la question, mais une approche différente.

J'avais un problème où je devais rafraîchir les fragments visibles. Tout ce que j'ai essayé a échoué et échoué lamentablement...

Après avoir essayé tant de choses différentes, j'ai finalement terminé ceci en utilisant BroadCastReceiver . Il suffit d'envoyer une diffusion lorsque vous devez faire quelque chose avec les fragments visibles et de le capturer dans le fragment.

Si vous avez besoin d'une réponse, vous pouvez également l'envoyer par diffusion.

salutations

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X