gpt4 book ai didi

java - Android fragment 在 Activity 重新启动时未重新创建

转载 作者:行者123 更新时间:2023-12-02 01:16:53 25 4
gpt4 key购买 nike

我有一个 Activity ,其中包含几个嵌套的 fragment 。我在处理方向变化时遇到了很多麻烦。当 Activity 尝试重新创建自身时,某些内容不正确,导致应用程序崩溃。如果我尝试在方向更改期间调试代码,应用程序将崩溃,并且 logcat 中没有任何消息。

我的问题似乎是运行时在我不希望的情况下尝试在我的 Activity 中重新创建 fragment 。所有 fragment 都没有 setRetainInstance(true),因此不应保留它们。

我已将日志记录添加到 Activity 和 Fragments 的 onCreate 和 onDestroy 方法中。当应用程序首次运行时,我得到以下输出:

Activity onCreate
Fragment1 onCreate
Fragment1 onCreateViewStart
Fragment1 onCreateViewEnd
Fragment2 onCreate
Fragment2 onCreateViewStart
Fragment2 onCreateViewEnd

然后我旋转设备并得到以下结果:

Fragment1 onDestroy
Fragment2 onDestroy
Activity onDestroy
Fragment1 onCreate
Fragment2 onCreate
Activity onCreate
Fragment1 onCreateViewStart
Fragment1 onCreateViewEnd
Fragment2 onCreateViewStart
Fragment2 onCreateViewEnd
Fragment2 onDestroy
Fragment2 onCreate

在上面的最后一条消息之后,应用程序崩溃并显示以下异常消息:

E/FragmentManager(32258): No view found for id 0x7f0a0047 (com.appName:id/fragmentHolder) for fragment Fragment2{6529b910 #6 id=0x7f0a0047 16002}

为什么我的 fragment 会自动重新创建?我可以做些什么来强制 Activity 重新加载,就像方向改变时第一次启动应用程序一样?这不是生命周期最初应该如何工作的吗?

如果需要,我可以添加任何代码。

最佳答案

  • FragmentManager 负责管理 fragment 和将它们添加到 Activity 的 View 层次结构中。

  • FragmentManager 处理两件事:

    • fragment 列表。
    • fragment 事务的返回堆栈。
  • 添加删除附加分离替换> fragment 列表中的 fragment 您使用Fragment Transactions

  • 当您使用 findFragmentById()findFragmentByTag() 向 FragmentManager 请求 fragment 时,如果该 fragment 是如果已经在列表中,FragmentManager 将返回它。然后你可以使用它。

知道这一点。如果发生方向更改时有 fragment 添加到 FragmentManager 的列表中,则将自动重新创建这些 fragment ,以便重新创建方向更改之前的 View 层次结构。如果您不希望重新创建 fragment ,请使用 fragment 事务将其从列表中删除。

关于java - Android fragment 在 Activity 重新启动时未重新创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25298093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com