我有这样的情况,我想从 backstack 中清除所有 fragment ,除了可见的 fragment (即在顶部)
比如backstack中有4个fragment A->B->C->D(D在最上面)
现在我想从后台删除 fragment A、B、C。但约束是在从后台堆栈中删除历史记录时,不应对 fragment D 产生任何可见的影响。
这是我的代码。
FragmentManager fm = getActivity().getSupportFragmentManager();
Bundle bundle = new Bundle();
OrderReceiptFragment orderReceiptFragment = new OrderReceiptFragment();
bundle.putSerializable("orderHistory", orderHistory);
orderReceiptFragment.setArguments(bundle);
CommonUtil.clearBackstack(fm);
fm.beginTransaction().setCustomAnimations(R.anim.enter_from_left,
R.anim.exit_to_right)
.replace(R.id.container, orderReceiptFragment).commit();
清空堆栈的方法
public static void clearBackstack(FragmentManager fragmentManager) {
fragmentManager.popBackStack(0, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
这里的问题是——在清除后台堆栈时,后台堆栈中的第一个 fragment 在几毫秒内变得可见。这看起来很奇怪。有人对此有任何解决方案吗?
最佳答案
你可以这样做
方法一:逐个删除
FragmentManager fm = getActivity().getSupportFragmentManager();
for (int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
方法二
FragmentManager fm = getActivity().getSupportFragmentManager();
fm .popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
查看此 Answer .你可以找到不同的方法
另请参阅popBackStackImmediate
关于Android:如何从后台删除 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24119014/