Search code examples
androidscrollandroid-viewpagerpagerslidingtabstrip

Android PagerSlidingTabStrip:Scrolling between tabs breaks when orientation changed


I am using PagerSlidingTabStrip for fixed tabs and ViewPager from the support library. When I change orientation from portrait to landscape and try to scroll from one page to another or try to click on one of the tabs, the scrolling somehow breaks. The scrolling indicator doesn´t move by tab width, but only by some random length.

@Override public void onViewCreated(View view, Bundle savedInstanceState)
{
    super.onViewCreated(view, savedInstanceState);

    //TODO BUG orientation changes
    PagerAdapter pagerAdapter = new PagerAdapter(getActivity().getSupportFragmentManager());
    pager = (ViewPager) view.findViewById(R.id.viewpager);
    pager.setAdapter(pagerAdapter);

    PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) view.findViewById(R.id.tabs);
    tabs.setShouldExpand(true);
    tabs.setViewPager(pager);

    pager.setCurrentItem(0);
}

Any idea why might that happen?


Solution

  • Based on your code, you obviously use ViewPager in Fragment (and ViewPager shows nested Fragments too).

    You have to provide a child FragmentManager of the Fragment holding the ViewPager (not the Activity's one) to ViewPager's adapter.

    Instead of:

    PagerAdapter pagerAdapter = new PagerAdapter(getActivity().getSupportFragmentManager());
    

    use this:

    PagerAdapter pagerAdapter = new PagerAdapter(getChildFragmentManager());