第一种:
private Fragment preFragment;
private FragmentTransaction switchFragment(Fragment targetFragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (!targetFragment.isAdded()) {
transaction.add(R.id.fragment, targetFragment, targetFragment.getClass().getName());
if (preFragment != null) {
transaction.hide(preFragment);
}
} else {
transaction.show(targetFragment)
.hide(preFragment);
}
preFragment = targetFragment;
return transaction;
}
先搞一个变量存着上一次 add 的 Fragment,
- 判断目标 Fragment 是否被添加到视图中;
- 如果已经添加过,直接显示目标Fragment,并隐藏之前的Fragment;
- 如果没被添加过,则添加进视图中;
- 考虑到第一次调用该方法的时候,preFragment为null,所以要做判空。
第二种:
/**
* 切换显示Fragment
*/
public void switchFragment(Fragment fragment){
// 开启事物
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
// 1.先隐藏当前所有的Fragment
List<Fragment> childFragments = mFragmentManager.getFragments();
for (Fragment childFragment : childFragments) {
fragmentTransaction.hide(childFragment);
}
// 2.如果容器里面没有我们就添加,否则显示
if(!childFragments.contains(fragment)){
fragmentTransaction.add(mContainerViewId,fragment);
}else{
fragmentTransaction.show(fragment);
}
// 替换Fragment
// fragmentTransaction.replace(R.id.main_tab_fl,mHomeFragment);
// 一定要commit
fragmentTransaction.commit();
}
网友评论