搜了一堆资料,一直没有找到好的方法。正打算放弃滚动方式,采用FragmentManager方式,然后看到了一这篇文章:这里写链接内容。
对于OnCreateView没有执行,网上有以下几种说法:
1.将FragmentAdapter换成FragmentStatePagerAdapter。
2.设置ViewPager的setOffscreenPageLimit。
3.getItem(int id)在此方法中创建需要的Fragment。
4.设置FragmentAdpater的FragmentMananger为getChildFragmentManager()
示例代码:
mAdapter = new FragmentPagerAdapter(getChildFragmentManager()) {
@Override
public Fragment getItem(int position) {
return mTabContents.get(position);
}
@Override
public int getCount() {
return mTabContents.size();
}
};
5.别用ViewPager了,直接用FragmentManager的FragmentTransaction进行切换。
示例代码:
FragmentManager fm = getSupportFragmentManager();
String tag = String.valueOf(flag);
Fragment frag = fm.findFragmentByTag(tag);
FragmentTransaction transaction = fm.beginTransaction();
if (curFrIdx >= 0) {
Fragment preFrag = fm.findFragmentByTag(String.valueOf(curFrIdx));
if (preFrag != null)
transaction.hide(preFrag);
}
curFrIdx = flag;
if (frag == null) {
try {
frag = (Fragment) frClasses[flag].newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
transaction.add(R.id.fr, frag, tag);
} else {
transaction.show(frag);
}
transaction.commitAllowingStateLoss();
亲测了一下,4、5两种方式都可以解决这个问题。
但是为了保持最小的代码修改,以及符合产品需求,最终只需要第四种方式就可以了。