移出后添加的fragment,展示指定的fragment:
添加fragment时候 需要fragment设置Tag,利用Tag找到指定fragment
public void rollBackAppointFragment(String fragmentName) {
int fragmentCount = getSupportFragmentManager().getBackStackEntryCount();
if ("".equals(fragmentName) || fragmentName == null) {
while (fragmentCount > 1) {
// getSupportFragmentManager().popBackStack();
getSupportFragmentManager().popBackStackImmediate();
fragmentCount--;
}
} else {
for (int i = fragmentCount - 1; i > -1; i--) {
FragmentManager.BackStackEntry entry = getSupportFragmentManager().getBackStackEntryAt(i);
getSupportFragmentManager().popBackStackImmediate();
if (entry.getName().equals(fragmentName)) {
break;
}
}
}
}
封装的两个添加fragment的方法:
在addFragment和switchContent方法中,对隐藏的fragment添加Tag(fragment.getClass().getSimpleName()),方便后面跳转到指定fragment使用(也可以用fragment Id)
//添加fragment,移除了当前的fragment,添加新fragment。点击返回键fragment会重建
public void addFragment(BaseFragmentTwo fragment) {
if (fragment != null) {
getSupportFragmentManager().beginTransaction()
//transaction.replace(R.id.fragment_container,fragment,tag);
//fragment.getClass().getSimpleName() 就是fragment的Tag
.replace(R.id.frameLayout, fragment, fragment.getClass().getSimpleName())
.addToBackStack(fragment.getClass().getSimpleName())
.commitAllowingStateLoss();
}
}
//添加fragment,隐藏了当前fragment,点击返回时当前的视图和数据还依然存在
public void switchContent(Fragment from, Fragment to) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction().setCustomAnimations(
android.R.anim.fade_in, R.anim.abc_fade_out);
if (!to.isAdded()) { // 先判断是否被add过
transaction.hide(from);
transaction.add(R.id.frameLayout, to);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.addToBackStack(from.getClass().getSimpleName());
transaction.commit(); // 隐藏当前的fragment,add下一个到Activity中
} else {
transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个
}
}
下面两个不执行的方法(没搞清楚怎么解决,看源码是需要mStateSaved这个参数的值设置为false,不然会报异常,下面代码就不执行了,清楚的高手希望留言交流,项目紧张,后面抽空解决会回来更新)
popBackStack(String tag,int flags)



tag可以为null或者相对应的tag,flags只有0和1(POP_BACK_STACK_INCLUSIVE)两种情况
如果tag为null,flags为0时,弹出回退栈中最上层的那个fragment。
如果tag为null ,flags为1时,弹出回退栈中所有fragment。
如果tag不为null,那就会找到这个tag所对应的fragment,flags为0时,弹出该
fragment以上的Fragment,如果是1,弹出该fragment(包括该fragment)以
上的fragment。
getActivity().getSupportFragmentManager().popBackStackImmediate(CreateGroupNameFragment.class.getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
即弹出Tag为CreateGroupNameFragment之上的所有(包括自身)的Fragment。
popBackStackImmediate(name,flag);


第二个参数:只能是 0 或者 1(POP_BACK_STACK_INCLUSIVE);
第一个参数为null时,第二个参数为0时:
会弹出回退栈中最上层的那一个fragment。
因为经测试,回退栈中的fragment个数减少了一个。
第二个参数为1时:会弹出所有回退栈中的fragment。
本文介绍了一种在Android应用中高效管理Fragment的方法,通过设置Tag来轻松切换和找回指定的Fragment,同时提供了添加和切换Fragment的封装代码,以及如何利用Tag进行回退栈管理。
1万+

被折叠的 条评论
为什么被折叠?



