1. 程式人生 > >ViewPager搭配FragmentStatePagerAdapter如何獲取Fragment的引用

ViewPager搭配FragmentStatePagerAdapter如何獲取Fragment的引用

我們知道如果用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的引用就行了。