OnPageChangeListener still active after changing fragment, causes IllegalStateException

232 Views Asked by At

After replacing a ViewPager with a single fragment as such:

fragmentManager.beginTransaction ().replace ( R.id.content_frame, fragment ).commit ();

If I scroll to the right - which shouldn't me possible because there is only one page - I get an IllegalStateExceptio on onPageSelected, because apparently the OnPageChangeListener is still active.

How do I approach this?

mViewPager.setOnPageChangeListener ( new ViewPager.OnPageChangeListener () {

        @Override
        public void onPageSelected ( int position ) {
            mActionBar.setSelectedNavigationItem ( position );
        }

        @Override
        public void onPageScrolled ( int arg0, float arg1, int arg2 ) {
        }

        @Override
        public void onPageScrollStateChanged ( int arg0 ) {
        }
    } );
1

There are 1 best solutions below

0
On

Here's a hackish workaround. There's got to be a better way, but it works. To disable paging, set the viewpager adapter to one with 0 pages.

public class EmptyPagerAdapter extends FragmentStatePagerAdapter {

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

@Override
public Fragment getItem ( int index ) {
    return null;
}

@Override
public int getCount () {
    return 0;
}

}