在项目中,有时会用到在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