Jon*_*n I 5 java android android-fragments fragmentmanager fragment-backstack
我想要的正确行为是:
Fragment A -> Fragment B -> Fragment C -> Fragment A
我目前所做的:
popBackStack()still 这里一切顺利。popBackStack()但 BackStackEntryCount 仍将包含 B 的条目。我真的需要backStackEntryCount与管理器中包含的片段相同。
有人知道我做错了什么吗?
我的代码:
        Fragment fragment1 = fragmentManager.findFragmentByTag("NavigationFragment_");
    if (fragment1 != null) {
        fragmentManager.beginTransaction()
                .setTransition(TRANSIT_FRAGMENT_FADE)
                .remove(fragment1)
                .commit();
    }
    fragmentManager.beginTransaction()
            .addToBackStack(backstack)
            .setTransition(TRANSIT_FRAGMENT_OPEN)
            //.remove(getFragmentManager().findFragmentByTag(NavigationFragment_.class.getSimpleName()))
            .add(R.id.fragmentContainer, fragment, fragment.getClass().getSimpleName())
            .commit();
我一直在寻找解决方案,但没有结果,所以请不要将此标记为重复。
提前致谢。
FragmentManager 的返回堆栈仅在两种情况下更新:
addToBackStack()popBackStack()没有其他操作影响返回堆栈 - 附加的 FragmentTransactions 不仅会addToBackStack()更改当前状态,而且不会影响调用时发生的情况popBackStack()等。
如果您希望堆栈从A到A -> B,您可以使用 FragmentTransaction 和addToBackStack(通常是一个replace操作):
fragmentManager.beginTransaction()
    .replace(R.id.fragmentContainer, fragmentB)
    .addToBackStack("b")
    .commit();
然后,您希望返回堆栈为A -> B,A -> C您需要执行两个操作:
// First pop B
fragmentManager.popBackStack("b", FragmentManager.POP_BACK_STACK_INCLUSIVE)
// Then addToBackStack C
fragmentManager.beginTransaction()
    .replace(R.id.fragmentContainer, fragmentC)
    .addToBackStack("c")
    .commit();
这可确保您在添加到返回堆栈FragmentB之前从堆栈中删除。FragmentC
同样,如果您想删除FragmentC并返回到FragmentA,只需将其从后退堆栈中弹出即可:
// Pop C, returning back to A
fragmentManager.popBackStack("c", FragmentManager.POP_BACK_STACK_INCLUSIVE)
注意:在同一个 FragmentManager 中混合返回堆栈 FragmentTransactions 和常规 FragmentTransactions 从来都不是一个好主意,因为popBackStack()不考虑 的当前状态FragmentManager,而是只是盲目地反转返回堆栈上的 FragmentTransaction (即最后一个 FragmentTransaction 与addToBackStack()。
| 归档时间: | 
 | 
| 查看次数: | 1404 次 | 
| 最近记录: |