2012-11-24 63 views
6

无论何时向用户显示片段,我都需要执行一些代码。Android碎片:生命周期方法*总是*在显示碎片时调用?

通过API查看我可以看到的最接近的钩子方法是onResume。但是,通过我的代码进行调试,似乎onResume是而不是,当用户选择后退按钮以返回到先前显示的片段时调用。

只是为了澄清我看到的行为:

我有一个“父”的活动,其配置选项卡中的动作条...和2个片段F1和F2。

用户选择一个选项卡并将F1加载到活动中。在按下按钮时,用户可以导航到F2。这不是一个单独的选项卡... F2被换入布局。

添加日志语句,我可以看到,当用户选择在F2的后退按钮时,会发生以下情况....

1)的onPause()被调用上F2。 2)将F1加载到活动中...但F1上的onResume()为不叫

此时日志中没有错误。

任何想法我在做什么错在这里?

在此先感谢,

尼尔。

+0

你应该总是发布你的相关代码,以便我们看到发生了什么。你是否将每个片段添加到后端堆栈? – Sam

+0

谢谢萨姆。在编辑我的问题并添加代码时,我注意到我的错误出现在我的片段切换代码中。我已经添加了一个答案解释。干杯。 – Neil

回答

9

好吧,看来这一次是飞行员的错误。我原来的代码在活动中切换片段是...

public void switchFragment(Fragment newFragment, String tag) { 
    getSupportFragmentManager() 
      .beginTransaction() 
      .add(android.R.id.content, newFragment) 
      .addToBackStack(tag) 
      .commit(); 
} 

在上面的代码中调用add()实际上应该是replace()。似乎不会用后退按钮行为替换活动混乱中的片段。

必须诚实并承认我不是100%确定为什么发生这种情况。但是,在进行更改之后,一旦调用后退按钮,就会在目标片段上调用onResume()方法。

+4

,所以你低估了我的答案,因为你搞砸了?多好啊...... –

+20

我没有downvote所需的声望。我实际上已经赞成你,纯粹是因为拼写错误'RTFM'的喜剧价值。 – Neil

+6

玩好孩子。 – Sandy

1

这个有点奇怪的问题,因为任何现有的类方法保证当这个特定的方法被设计为被调用的事件发生并且满足所有条件时被调用。选择适合你想要完成的任务。见文档here

enter image description here

+6

这有些奇怪的答案,因为在你急于变聪明的时候,你显然从来没有读过我的问题。我做了'RTFM'(我想这就是你的意思),'手动'没有帮助我。正如我所解释的那样,没有生命周期方法,我可以看到当片段返回时通过按下后退按钮可以保证这种方法被调用。 – Neil

+1

包含在我的答案中的图表元素不清楚吗? –

+6

所有的图都很清晰,因为它是Android javadoc的一部分 - 但它并不回答我的问题。 – Neil