2017-09-25 45 views
0

我一个片段A.我喜欢这个标签add()它:片段不调用生命周期方法

fragmentTransaction.addToBackStack(special_tag); 

然后在片段A.之后的顶部,我只是add() B片段,我决定移除B片段并返回一个用来片段:

activity.fragmentManager.popBackStackImmediate(special_tag, 0) 

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

有人可以解释这种行为,也许建议一个替代?

(我需要“刷新”的数据时,我回来片段的第二次)

  1. 是什么原因造成这样的结果?

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

更新

片段B是GuidedStepFragment和不具有.replace()功能。我发现它有finishGuidedStepFragments(),但它(再次)的行为是相同的(它不会调用片段生命周期功能)

现状:

片段A(简单片段) - >。新增(片段B )(GuidedStepFragment) - >popBackStackImmediate()finishGuidedStepFragments()

我添加片段B是这样的:

GuidedStepFragment.add(activity.fragmentManager, fragmentB.createInstance()) 
+0

您是否在片段A中调用add()??如果是这样,请添加您用于该片段交易的代码。 – Jon

+0

另外,片段A是一个'GuidedStepFragment'? – Jon

+0

@Jon更新!片段A是简单的片段。 – JoshuaMad

回答

3

使用fragmentTransaction.add(Fragment)不会删除片段A.什么是实际发生的事情是片段A是仍然在片段B后面运行。由于片段A永不停止运行,它的生命周期不需要重新触发。

考虑使用fragmentTransaction.replace(Fragment)并用碎片B替换容器(片段A)中的片段。如果从后端堆栈中弹出该事务,则碎片A将重新附加并按照您的预期生命周期进行操作。

更新

既然你似乎可以用GuidedStepFragment■从Leanback的图书馆,这是一个有点棘手。 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 
+0

如果我在片段B(片段A)时需要选择返回按钮,该怎么办?如果我使用.replace,那么这是不可能的。 – JoshuaMad

+1

这是可能的,它的工作原理与现在一样。你必须检查fragment.onOptionSelected()中的android.R.id.home。 – ElDuderino

+0

如果将'replace(...)'添加到后台堆栈中,那么当您弹出该事务时,将发生反向替换。将后台视为“撤销最新交易”。正如@ElDuderino所说,这与你已有的行为完全一样。 – Jon

相关问题