Android FragmentManager 在清除 fragment 时调用 onCreateView

标签 android android-fragments

我有这些 fragment 操作方法:

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

场景:

当创建 Activity 时,我从 fragment A 开始。 addFragment(new A, false);

然后我添加 fragment B。replaceFragment(new B);

我添加另一个 fragment C。addFragment(new C);

在 C fragment 中,我想将应用程序重置为 A fragment 。我调用 clearFragments();添加 fragment (新 A,假);

问题是 B fragment onCreateView 在 C fragment 上按下清除 fragment 并添加 A fragment 的按钮后被调用。我没有看到该 fragment ,但它启动了导致我的应用程序崩溃的后台线程。我需要在不调用它们的 onCreateView() 方法的情况下清除所有 fragment 。

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

最佳答案

实际上在这种情况下你总是会返回到 fragment B。

一步一步:

  1. 添加 A.
  2. 用 B 替换 A <- 在这一步之后,您的 Activity 中就没有 A 了。
  3. 添加 C。在这里您要添加另一个 fragment 并告诉 FragmentManager 将 fragment 的当前状态保存到后台堆栈。此时您的当前状态是 fragment B。然后添加 fragment C。
  4. 当您调用 clearFragments 时,FragmentManager 返回到第一个保存的状态 - 这个状态是 fragment B。

也许你忘了说点什么?我尝试将多个条目放入后退堆栈,然后重置为第一个状态 - onCreateView 被调用一次,仅针对第一个 fragment 。

关于Android FragmentManager 在清除 fragment 时调用 onCreateView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25834142/

相关文章:

android - 无法刷新 ListFragment 中的数据

android - Fragment 的 getView() 在 OnClickListener 回调中返回 null

以 jpeg 格式存储 GPS 的 Android 被损坏

android - Play 服务 9.2.1 中的 Firebase NullPointerException

Android Webview GIF 堆随着时间的推移急剧增长

android - 设计问题 - 从 TabLayout 启动新 fragment

android - 从 fragment 中显示 TimePickerDialog

android-fragments - 返回堆栈碎片限制

java - ViewPager 的 TabLayout 不显示标题

java - 设置http请求的类型