我们知道如果用FragmentPagerAdapter这个适配器的话,通过以下代码可以获取ViewPager里每个Fragment的引用:
String name = "android:switcher:" + viewPagerId+ ":" + index;;
Fragment fragment =getSupportFragmentManager().findFragmentByTag(name);
但是在一些特殊场合我们要用到FragmentStatePagerAdapter,这是应该怎么办呢?那就得对FragmentStatePagerAdapter做下处理,那就是用一个HashMap来存放Fragment,来看一下代码:
class MyAdapter extends FragmentStatePagerAdapter {
private Map<Integer, MyFragment> mPageReferenceMap = new HashMap<>();
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
MyFragment fragment = MyFragment.newInstance()
mPageReferenceMap.put(position, fragment);
return fragment;
}
@Override
public int getCount() {
return size;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
mPageReferenceMap.remove(position);
}
public MyFragment getFragment(int key) {
return mPageReferenceMap.get(key);
}
}
然后通过MyAdapter里的getFragment()来获取Fragment的引用就行了。