The listed code looks a bit hacky and might break under changes to android source code.
I would recommend you to make your custom adapter saving list of fragments and using the getter method to access them later
public class CustomAdapter extends FragmentStatePagerAdapter {
SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();
private List<Fragment> fragmentList;
public CustomAdapter(FragmentManager fm, List<Fragment> fragmentList) {
super(fm);
this.fragmentList = fragmentList;}
@Override
public Fragment getItem(int position) {
return fragmentList.get(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);
}
@Override
public int getCount() {
return fragmentList.size();
}
}
finally, you can use your viewpager to get required fragment using:
Fragment fragment = mViewPagerAdapter.getRegisteredFragment(viewPager.getCurrentItem());