当前位置: 首页 > 知识库问答 >
问题:

Android碎片:生命周期方法*总是*在显示碎片时调用?

谷梁永年
2023-03-14

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

通过查看API,我能看到的最接近的钩子方法是onResume。但是,从我的代码调试来看,当用户选择back-button返回到先前显示的片段时,似乎没有调用onResume。

为了澄清我看到的行为:

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

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

添加日志语句,我可以看到当用户选择F2上的back-button时,会发生以下情况....

1)在f2上调用onPause()。2)将F1加载到活动中...但未调用F1上的onResume()

此时日志中没有错误。

你知道我做错了什么吗?

尼尔。

共有1个答案

山凌
2023-03-14

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

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

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

老实说,我不能百分之百确定为什么会发生这种事。但是,在进行更改之后,一旦调用了back-button,就会在目标片段上调用onResume()方法。

 类似资料:
  • 我有一个mainActivity承载一个ViewPager并包含三个选项卡(MQTT、ECO、Logger)。mainActivity具有生命周期回调(onCreat,onResume),其他三个选项卡具有片段的生命周期回调(onattached,onCreateView,onViewcreated,onResume,onPause)。 在运行时,我在logCat中收到以下信息: 当我从日志记录选

  • 我刚刚开始了解Android中的s。 当您创建一个新的空白项目时,默认情况下还包括一个,尽管它并没有真正被使用。我的印象是,谷歌希望你一直使用s,无论应用程序多么简单。这是一个真实的评估,还是你能想出不使用s的理由? 我还觉得奇怪的是,留档表明也可以用于与UI无关的内容。你能给我一个应用程序的例子,它将使用,但不提供任何UI?

  • 我可以使用一个片段作为一个活动吗?我已经创建了一个片段,但我希望它有像活动一样的功能,所以我使用片段扩展碎片活动。然而,我有一个带有碎片的导航抽屉。当我更改为“扩展碎片活动”时,我的代码有问题?请给我指路。

  • 我正在使用以下方法通过显示/隐藏片段(在我的NavigationDrawer中)在片段之间切换。 我不清楚的是,当我显示或隐藏碎片生命周期的哪个方法被调用?(由于没有onShow()或onHide()这样的方法,我不太确定该使用什么)。我想在显示和隐藏某个片段时执行特定的操作。

  • 我的应用程序中有两个选项卡,其中有两个,当我单击第一个选项卡中的一个项时,它会向第二个选项卡添加一个项(下载链接到下载管理器),但用户直到片段和(旋转,退出,转到第三个选项卡)才能看到更改,我认为这是因为中的片段保留了前一个选项卡。 我怎样才能强制android在标签更改上摧毁碎片?我甚至尝试了使用接口,但它对我不起作用,可能是因为只在片段创建上运行?

  • 我有一个动作和一个碎片。活动没有膨胀的菜单,而片段有一个带有两个按钮的菜单。片段菜单是可见的,但按钮没有任何反应时,轻点。在调试过程中,我可以看到Fragment和Activity的onCreateOptionsMenu()都被调用,但是当点击按钮时,没有onOptionsItemSelected()被调用,既没有从Activity调用,也没有从Fragment调用。