我的平板开发分为5个模块为了方便对各个模块里面的Fragment 的管理所以我给新建的每一个Fragment设置了type,
在BaseFragment中加入了如下的方法。
public enum FragmentType {
CASH, MEMBER, ORDER, STATISTIC, SETTIGN
}
public abstract FragmentType getFragmentType();
然后每新建一个fragment我都会设置type。
@Override
public FragmentType getFragmentType() {
return FragmentType.MEMBER;
}
然后在BaseFragment中就可以获取到在Fragment栈中筛选出当前模块的Fragment。
/**
* 获取Fragment栈
*/
public List<Fragment> getFragmentStack() {
List<Fragment> fragmentList = getFragmentManager().getFragments();
int num = fragmentList.size();
List<Fragment> resultList = new ArrayList<>();
for (int i = 0; i < num; i++) {
Fragment itemFragment = fragmentList.get(i);
if (itemFragment instanceof BaseFragment) {
if (((BaseFragment) itemFragment).getFragmentType() == this.getFragmentType()) {
resultList.add(itemFragment);
}
}
}
return resultList;
}
getFragmentManager().getFragments()是所有获取所有的Fragment,有些并没有加入到回退栈中。
回退栈中的fragment可以通过遍历回退栈中的每一个Fragment
int count = getFragmentManager().getBackStackEntryCount();
for (int i = 0; i < count; i++) {
FragmentManager.BackStackEntry fragment = getFragmentManager().getBackStackEntryAt(i);
}
获取Fragment回退栈中Fragment的个数:getFragmentManager().getBackStackEntryCount();