Fragment不会调用生命周期方法

时间:2017-09-25 17:39:23

标签: android android-fragments

我有一个片段A.我document.addEventListener("resume", onResume, false); function onResume() { screen.lockOrientation('landscape'); } 标签如下:

add()

然后我只是在片段A的顶部fragmentTransaction.addToBackStack(special_tag); 片段B.之后,我决定删除片段B并使用以下命令返回片段A:

add()

当我到达片段A时,似乎片段不会重新运行它的生命周期方法:onAttach(),onResume(),onCreate()等。

有人可以解释这种行为并建议另类吗?

(当我第二次回到片段A时,我需要“刷新”数据)

  1. 导致此结果的原因是什么?

  2. 是否有干净的解决方案/解决方法?

  3. 更新

    片段B是activity.fragmentManager.popBackStackImmediate(special_tag, 0) ,没有GuidedStepFragment函数。我发现它有.replace(),但它的行为相同(它不调用片段生命周期函数)

    情况(再次):

    片段A(简单片段) - > .add(片段B)(GuidedStepFragment) - > finishGuidedStepFragments()popBackStackImmediate()

    我像这样添加片段B:

    finishGuidedStepFragments()

1 个答案:

答案 0 :(得分:3)

使用fragmentTransaction.add(Fragment)不会删除片段A.实际上发生的是片段A 仍在运行片段B后面。由于片段A从未停止运行,因此它的生命周期不需要重新触发。

考虑使用fragmentTransaction.replace(Fragment)并用片段B替换容器中的片段(片段A)。如果从后台堆栈弹出该事务,则片段A将重新附加并遵循预期的生命周期。

<强>更新

由于您似乎正在使用leanback库中的GuidedStepFragment,因此这有点棘手。 GuidedStepFragment实际上在幕后执行replace(...),但您将片段B添加到其他容器中,因此我提到的原始行为不适用。

我不熟悉leanback(因为它通常只用于Android电视),但我知道你至少可以做到以下几点。如果您跟踪后台堆栈大小,当弹出所有GuidedStepFragment时,您将返回原始片段。例如,假设你的后台开始于零:

activity.fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
            @Override
            public void onBackStackChanged() {
                if (activity.fragmentManager.getBackStackEntryCount() == 0){
                    // handle your updates
                }
            }
        });

 // the next line of code will add an entry to the backstack
 GuidedStepFragment.add(activity.fragmentManager, fragmentB.createInstance());
// eventually when back is pressed and the guided fragment is removed, the backstack listener should trigger