Try this:
In onCreate(),
pager = (ViewPager) findViewById(R.id.pager);
adapter = new MyPagerAdapter(getSupportFragmentManager());
pager.setAdapter(adapter);
// Here you can specify how many pages(Fragments) to load.
pager.setOffscreenPageLimit(3);
pager.setPageMargin(pageMargin);
// Setting PageChangeListener...
pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
{
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
}
@Override
public void onPageSelected(int position)
{
// Here, you have a current selected page
}
@Override
public void onPageScrollStateChanged(int state)
{
}
});
// This method is used to get the current selected fragment from `ViewPager`
private YourFragment getCurrentFragment()
{
YourFragment fragment = (YourFragment) adapter.getRegisteredFragment(pager.getCurrentItem());
return fragment;
}
Now, FragmentStatePagerAdapter
code
public class MyPagerAdapter extends FragmentStatePagerAdapter
{
// Titles of the fragments
private final String[] TITLES = { ... };
SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();
public MyPagerAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public CharSequence getPageTitle(int position)
{
return TITLES[position];
}
@Override
public int getCount()
{
return TITLES.length;
}
@Override
public Fragment getItem(int position)
{
if (position == 0)
{
return Fragment1.newInstance(position);
}
else if (position == 1)
{
return Fragment2.newInstance(position);
}
else if (position == 2)
{
return Fragment3.newInstance(position);
}
return Fragment4.newInstance(position);
}
@Override
public Object instantiateItem(ViewGroup container, int position)
{
Fragment fragment = (Fragment) super.instantiateItem(container, position);
registeredFragments.put(position, fragment);
return fragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object)
{
registeredFragments.remove(position);
super.destroyItem(container, position, object);
}
public Fragment getRegisteredFragment(int position)
{
return registeredFragments.get(position);
}
}
Hope this will help you out.