【问题标题】:Fragment is not visible after popbackstackpopbackstack 后片段不可见
【发布时间】:2017-02-27 11:13:53
【问题描述】:

我在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);
}

【问题讨论】:

  • 试试fragmentManager.popBackStackImmediate()
  • @KamranAhmed 它没有改变任何东西

标签: android android-fragments fragmentmanager fragment-backstack


【解决方案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(...);

这为我解决了这个问题。

致:https://stackoverflow.com/a/42597413/5310016

【讨论】:

    【解决方案2】:

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

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

    返回

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

    一切正常

    【讨论】:

    • 我遇到了完全相同的问题,更改库版本没有帮助。您确定您没有更改代码中的任何内容吗?
    • 不是 100%,但我很确定我没有更改任何其他内容。
    猜你喜欢
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多