web-dev-qa-db-fra.com

Le ViewPager dans le fragment d'onglet ne se charge pas une deuxième fois

J'essaie de créer une application qui a un ViewPager dans un fragment qui fait partie d'un TabHost.

Tout fonctionne bien. J'ai ma barre d'onglets, je peux changer d'onglet. Lorsque je passe à l'onglet avec le ViewPager, tout s'affiche correctement. Mais dès que je quitte cet onglet avec le ViewPager et retourne cet onglet, mon contenu n'est pas affiché. Si je défile deux fois sur le côté, je vois ma prochaine image. Et si je reviens deux fois en arrière, je vois aussi que les images sont chargées (probablement hors écran). Voyez que mon TabFragment est en train d'être rétabli quand je reviens dessus, mais pas les fragments dans le ViewPager.

J'ai inclus une maquette d'écran et une partie de mon code.

Quelqu'un peut-il aider?

À votre santé!

@Override
public void onActivityCreated(Bundle savedInstanceState) {

    mProjectText = (TextView) getView().findViewById(R.id.projectText);
    mProjectText.setText(mActiveProject.getInspirationText());

    mAdapter = new AlbumAdapter(getFragmentManager(), mActiveProject.getInspiration());

    mPager = (ViewPager)getView().findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);


    super.onActivityCreated(savedInstanceState);
}




public class AlbumAdapter extends FragmentStatePagerAdapter {

private ArrayList<ProjectContent> mItems;

public AlbumAdapter(FragmentManager fm, ArrayList<ProjectContent> items) {
    super(fm);
    this.mItems = items;
}

@Override
public Fragment getItem(int position) {
    return AlbumContentFragment.newInstance(mItems.get(position));
}

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

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}}

The mockup for the app

50
Daan Olislagers

J'ai trouvé le problème. Cela m'a pris deux jours, mais bon, c'est réparé.

À la place d'utiliser

mAdapter = new AlbumAdapter(getFragmentManager(), mActiveProject.getInspiration());

Tu devrais utiliser

mAdapter = new AlbumAdapter(getChildFragmentManager(), mActiveProject.getInspiration());

Voilà pour 5 personnages.

162
Daan Olislagers

Je cherchais depuis longtemps pour trouver une solution.Changez votre instance d'adaptateur de page FragmentPagerAdapter en FragmentStatePagerAdapter exemple:

class PageAdapter extends FragmentStatePagerAdapter {
43
rajesh v

vous devez utiliser getChildFragmentManager() au lieu de getFragmentManager() et FragmentStatePagerAdapter() au lieu de FragmentPagerAdapter(). J'espère que cela sera utile pour quelqu'un.

4
Akhtar