在ui上,我们经常会使用 FragmentManager
对fragment经行管理。
常常使用replace()对fragment经行切换,如下:
private void switchFragment(BaseFragment targetFragment) {
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fm_home,targetFragment);
fragmentTransaction.commit();
}
但通过测试发现,replace会调用fragment的destroy方法,再次切换回来之后会重新加载view,但这样对于用户体验来说极差,所以有了替代方法:
//一个成员变量保存之前一个fragment
private BaseFragment oldFragment =null ;
private void switchFragment(BaseFragment targetFragment) {
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
//判断是否被加载到activity
if (!targetFragment.isAdded()) {
fragmentTransaction.add(R.id.fm_home,targetFragment);
}
if (oldFragment != null) {
//第二次以后切换需要隐藏之前的fragmnet
fragmentTransaction.hide(oldFragment);
}
fragmentTransaction.show(targetFragment);
oldFragment= targetFragment;
fragmentTransaction.commit();
}