popbackstack 后片段不可见

Fragment is not visible after popbackstack

我在 Activity.onCreate() 中添加了片段(主页片段),但没有将其添加到后台堆栈,我使用 FragmentTransaction.replace() 进行了添加。之后,我使用 FragmentTransaction.replace() 添加每个下一个片段并将其添加到后台。

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

如果我只添加 1 个片段到 backstack 然后清除 backstack 它工作正常,但如果我添加多个然后在清除 backstack 后屏幕是空白的,尽管主片段接收 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);
}

原来新的支持库版本搞砸了。更改后

compile 'com.android.support:appcompat-v7:25.1.1'

回到

compile 'com.android.support:appcompat-v7:25.0.1'

一切正常

有一个新的 FragmentTransaction 方法(在版本 25.1.0 中添加)参见:https://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html#setAllowOptimization(boolean)

尝试在 FragmentTransaction 上设置此项,同时 :

final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();    
transaction.setAllowOptimization(true);
transaction.replace(...);

这解决了我的问题。

感谢: