直接使用FragmentTranslator的replace(container,fragment)其实是先remove(),再add(),导致前一个fragment要再显示会重新调用它的onCreatView,对对象多的页面是个很
大的弊端,会出现闪一下的现象,通过对“农民伯伯”的一片博文学习,总结一下。
1.写一个BaseFragment extents Fragment(这里能保证在主页面显示各个fragment的时候不重叠)
public class BaseFragment extends Fragment
{
@Override
public void setMenuVisibility(boolean menuVisible)
{
super.setMenuVisibility(menuVisible);
if (this.getView() != null)
this.getView().setVisibility(menuVisible ? View.VISIBLE : View.GONE);
}
}
2.编写各个主要的fragment页面,都是继承BaseFragment
3.在主页面控制显示,点击各个tab button中的主要函数
private void setTabSelection(int i)
{
resetStatus();
// 改button被选中(改变其显示的状态)
mButtonList[i].setSelected(true);
// 选中button后的页面显示
Fragment fragment = (Fragment) mFragmentPagerAdapter.instantiateItem(mContainer, i);
mFragmentPagerAdapter.setPrimaryItem(mContainer, 0, fragment);
mFragmentPagerAdapter.finishUpdate(mContainer);
}
说明:
instantiateItem(布局容器FramLayout,position)是在FragmentManage中查找Fragment,没有就新建,setPrimaryItem是设置显示和隐藏,finishUpdate为提交事务。
注:农民伯伯的博文地址:http://www.cnblogs.com/over140/p/3362047.html
及demo:http://files.cnblogs.com/over140/SampleFragmentSwitch.zip