【问题标题】:What will be fragment behavior when came from background. Considering fragment is in stack当来自后台时,片段行为将是什么。考虑片段在堆栈中
【发布时间】:2020-07-29 19:19:21
【问题描述】:

我有一个导航面板活动。菜单部分有 5 个片段(将其命名为 Fragment1、Fragment2、...)。

现在默认情况下,活动将显示 Fragment1。

如果用户从 Fragment1 导航到 Fragmentxtz。我们将在 Fragment1 之上添加片段。

现在用户通过按主页按钮进入后台并从任务中打开应用程序。

现在我知道 Fragmentxtz onStart 将被调用。但是我看到 Fragment1 onStart 也被调用了。

这是预期的行为吗?

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    正如您在 Android Developers 上看到的,您的片段将在 onViewCreated() 处调用。

    https://developer.android.com/guide/components/fragments#Creating

    如果您更改了系统语言或类似的东西,则必须更新视图。

    【讨论】:

    • 是的,我知道流程。但我的问题是,如果片段在后堆栈中,这意味着还有另一个片段位于该片段的顶部。在这种情况下,如果你去后台和前台,那么在后台堆栈中的片段也会调用它的 onStart() 。我知道进入前台的片段会调用它的生命周期事件,但不会调用在后台的片段。
    【解决方案2】:

    为这里可能发生的事情提供更多背景信息。

    如果您的两个片段都被添加,例如正如罗伯特指出的那样,当为用户恢复布局时,它们都将通过FragmentTransaction.add() 调用onCreateView()。从系统的角度来看,所有这些片段都与用户相关,并且会同时显示。

    另一方面,如果您通过FragmentTransaction.replace() 添加片段,则只有后堆栈上最顶部的片段会收到onCreateView() 调用。这也可以通过对旧片段进行addremove 来实现。如果您在按下后退按钮后通过后退堆栈使此事务可逆,则您的前一个片段将收到适当的生命周期回调。

    【讨论】:

    • 如果您在堆栈“FragmentTransaction.add()”中添加了 10 个片段并且用户进入后台和前台。调用所有 10 个片段 onCreateView() ?只是想知道它是这样工作的吗?
    • @YogeshByndoor 是的,因为您可以在一个 Activity 中并排显示多个 Fragment,并且某些 Fragment 可能根本没有 UI,只做一些后台工作,而另一些会显示。所以你必须明确告诉框架删除未使用的片段。
    • 谢谢,我相信了。
    • 很高兴能为您提供帮助。考虑支持和标记帮助您解决问题的解决方案。这将帮助其他人找到相关答案并提高帮助您的成员的声誉。
    猜你喜欢
    • 2011-09-24
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2022-12-11
    相关资源
    最近更新 更多