6

每当向用户显示片段时,我都需要执行一些代码。

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

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

我有一个“父”活动,它在 ActionBar 中配置选项卡......以及 2 个片段 F1 和 F2。

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

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

1) onPause() 在 F2 上被调用。2) F1 被加载到活动中......但没有调用F1 上的 onResume()

目前日志中没有错误。

有什么想法我在这里做错了吗?

提前致谢,

尼尔。

4

2 回答 2

10

好吧,这似乎是飞行员失误。我在活动中的片段之间切换的原始代码是......

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

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

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

于 2012-11-24T21:00:01.183 回答
0

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

在此处输入图像描述

于 2012-11-24T17:55:38.277 回答