11

I have a Fragment MyFragment vith a ViewPager containing more Fragment. It works properly the first time I load MyFragment, but if I go back and recreate it, the Fragments in the ViewPager are not shown because the method FragmentPagerAdapter.getItem is not called.

I'm using

What's wrong?

import android.app.Fragment;
import android.app.FragmentManager;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
...

public class MyFragment extends Fragment {

    private ViewPager pager;
    private MyPagerAdapter adapter;

    private List<Fragment> fragmentList = new ArrayList<Fragment>();

    public MyFragment() {}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                 Bundle savedInstanceState) {
        return inflater.inflate(R.layout.my_fragment_layout, container, false);
    }

    public void onViewCreated(View v, Bundle savedInstanceState) {
        super.onViewCreated(v, savedInstanceState);

        indicators = (PagerSlidingIndicator) v.findViewById(R.id.indicators);
        pager = (ViewPager) v.findViewById(R.id.pager);

        Fragment fragment1 = new Fragment1();
        fragmentList.add(fragment1);

        Fragment fragment2 = new Fragment2();
        fragmentList.add(fragment2);

        Fragment fragment3 = new Fragment3();
        fragmentList.add(fragment3);

        adapter = new IndicatorPagerAdapter(getFragmentManager());
        pager.setAdapter(adapter);
    }

    public class MyPagerAdapter extends FragmentPagerAdapter {

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

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

        @Override
        public Fragment getItem(int position) {
            return fragmentList.get(position);
        }
    }
}
jul
  • 36,404
  • 64
  • 191
  • 318

1 Answers1

34

If you are using nested fragments ("I have a Fragment MyFragment vith a ViewPager containing more Fragment"), you need to use getChildFragmentManager(), not getFragmentManager(), when setting up your FragmentPagerAdapter.

CommonsWare
  • 986,068
  • 189
  • 2,389
  • 2,491
  • getChildFragmentManager(): Call requires API level 17, and I have min=15. So the only way is to use support `Fragment`, right? – jul Sep 12 '14 at 13:14
  • Yes, the sad truth is that I had to replace all my Fragments by support Fragment to be able to use getChildFragmentManager() – jul Sep 12 '14 at 13:48
  • @jul: Yes, the notion of nested fragments was only added to the native implementation of fragments in API Level 17. Your alternatives would be either to not have the `ViewPager` be in a fragment or not have fragments as pages of the `ViewPager`. – CommonsWare Sep 12 '14 at 20:24
  • @CommonsWare I have a similar problem but my ViewPager is wrapped in an activity with fragments as the pages. Is there a way to make it work like that, or do I HAVE to wrap the viewpager in a fragment (e.g, it would be activity->fragment->viewpager->fragments as pages in viewpager)? My question is [here](http://stackoverflow.com/questions/36098872/fragment-in-viewpager-is-not-displaying-anything-in-its-recyclerview-on-rotation) and would appreciate it if you checked it out! Thanks. – David Velasquez Mar 19 '16 at 08:22
  • its been a week i am search for solution for this problem thanks – Abhishek Garg Dec 02 '18 at 14:37