Android FragmentManager在清除片段时调用onCreateView

Android FragmentManager在清除片段时调用onCreateView,android,android-fragments,Android,Android Fragments,我有以下碎片操纵方法: public void replaceFragment(Fragment fragment) { FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.main_frame, fragment); fragmentTransaction.commit(); fragmentM

我有以下碎片操纵方法:

public void replaceFragment(Fragment fragment) {
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.main_frame, fragment);
    fragmentTransaction.commit();
    fragmentManager.executePendingTransactions();
}

public void addFragment(Fragment fragment, boolean addToBackStack) {
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.main_frame, fragment);
    if (addToBackStack) {
        fragmentTransaction.addToBackStack(fragment.getClass().getName());
    }
    fragmentTransaction.commit();
    fragmentManager.executePendingTransactions();
}

public void clearFragments() {
    if (fragmentManager.getBackStackEntryCount() > 0) {
        FragmentManager.BackStackEntry first = fragmentManager.getBackStackEntryAt(0);
        fragmentManager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }
}
情景:

当创建活动时,我从片段A开始addFragment(新的A,false)

然后我添加片段B.replaceFragment(新的B)

我添加另一个片段C.addFragment(新的C)

在C片段中,我想将应用程序重置为片段。我调用clearFragments();addFragment(新的A,false)

问题是,按下C片段上的按钮清除片段并添加片段后,会调用B片段
onCreateView
。我没有看到片段,但它启动了后台线程,使我的应用程序崩溃。我需要清除所有片段,而不调用它们的
onCreateView()
方法


这是预期的行为,还是我做错了什么?

实际上,在这种情况下,您将始终返回片段B

逐步:

  • 添加A

  • 将A替换为B如何在不返回第一个保存状态的情况下清除所有片段,以便在应用程序中看到R.id.main_frame所在的空白?您可以为第一个片段-A调用addToBackStack,而不是addFragment(new A(),false)->addFragment(new A(),true)。因此,您的第一个状态将是空容器。如果您想保留后堆栈,您可以手动删除所有片段to
    addFragment(新的A,true)没有帮助。同样的情况也会发生。在清除片段之后,我返回片段B。哦,我忘了提到replaceFragment也应该有addToBackStack调用。没有它,您的后堆栈链就不会满。你能把它加起来再检查一下吗?