You need to register your fragments during filling, and then access them from the outside.
public class AppSectionsPagerAdapter extends FragmentPagerAdapter { private SparseArray<Fragment> registeredFragments = new SparseArray<>(); public AppSectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int i) { switch (i) { case 0: return new NPListFragment(); case 1: return new PListFragment(); case 2: return new FavouritesFragment(); } return null; } @Override public int getCount() { return 3; } @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); }
Now you can register fragments from the outside
int pos = viewpager.getCurrentItem(); Fragment fragment = adapter.getRegisteredFragment(pos); switch (pos) { case 0: { ((NPListFragment) fragment).refreshT(); break; } case 1: { ((PListFragment) fragment).refreshK(); break; } case 2: { ((FavouritesFragment) fragment).refreshL(); break; } }
source share