ViewPager搭配FragmentStatePagerAdapter如何獲取Fragment的引用
阿新 • • 發佈:2019-01-23
我們知道如果用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的引用就行了。