在項目中,有時會用到在ViewPager中顯示同樣類型的Fragment,同時這樣的Fragment的個數是動態的,但是PagerAdapter沒有給我們提供getCurrentFragment類似的方法。
通過查閱資料和看源碼,PagerAdapter中有個setPrimaryItem(ViewGroup container, int position, Object object) 方法,我們在這裏面將就可以獲得當前的Fragment,我們將其記錄下來,然後在自己的PagerAdapter中寫個getCurrentFragment() 方法,就可以在外部獲取當前界面的Fragment。
public class XXXPagerAdapter extends FragmentStatePagerAdapter {
private XXXFragment mCurrentFragment;
private List<XXX> mList;
public XXXPagerAdapter(FragmentManager fm, List<XXX> list) {
super(fm);
mList = list;
}
@Override
public Fragment getItem(int position) {
return XXXFragment.newInstance(mList.get(position));
}
@Override
public int getCount() {
return mList == null ? 0 : mList.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
XXXFragment fragment = (XXXFragment) super.instantiateItem(container, position);
return fragment;
}
//----------------------下面纔是重點-----------------
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
mCurrentFragment = (XXXFragment) object;
super.setPrimaryItem(container, position, object);
}
public XXXFragment getCurrentFragment() {
return mCurrentFragment;
}
}
這裏的FragmentStatePagerAdapter是繼承與PagerAdapter的。
在Activity 中只需這樣調用:
mPagerAdapter.getCurrentFragment();
參考:http://www.cnblogs.com/englefly/p/4222953.html