popbackstack 后片段不可见

Ful*_*dom 5 android android-fragments fragmentmanager fragment-backstack

我在 中添加片段(主片段)Activity.onCreate(),而不将其添加到后台堆栈,我使用FragmentTransaction.replace(). 之后我使用添加每个下一个片段FragmentTransaction.replace()并将其添加到后台堆栈。

我有一个功能可以清除后退堆栈,使主页片段可见,为此我使用FragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);.

如果我只向后台堆栈添加 1 个片段,然后清除后台堆栈,则效果很好,但如果我添加多个片段,则在清除后台堆栈后,屏幕为空白,尽管主片段接收到 onStart() 和 onResume() 并认为它是可见的,它不会收到 onPause()、onStop(),直到我再次添加另一个片段或离开应用程序。另外,如果我popBackstack()一一地(在用户操作上)它工作正常,但如果我popBackstack()在循环中(一次弹出所有片段)它就不起作用。

这是代码:

public void changeFragment(BaseFragment fragment, boolean addToBackStack, boolean preventDuplicate) {
    Fragment topFragment = getSupportFragmentManager().findFragmentById(fragmentContainer.getId());
    if (preventDuplicate && topFragment != null && fragment.getClass().equals(topFragment.getClass())) {
        //Prevent adding same fragment
        return;
    }

    FragmentTransaction transaction =
            fragmentManager
                    .beginTransaction()
                    .replace(fragmentContainer.getId(), fragment);

    if (addToBackStack) {
        transaction.addToBackStack(null);
    }

    transaction.commit();
}

public void goToHome() {
    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
Run Code Online (Sandbox Code Playgroud)

Ful*_*dom 2

事实证明,新的支持库版本把事情搞砸了。改变后

compile 'com.android.support:appcompat-v7:25.1.1'
Run Code Online (Sandbox Code Playgroud)

回到

compile 'com.android.support:appcompat-v7:25.0.1'
Run Code Online (Sandbox Code Playgroud)

一切正常