【发布时间】:2014-08-14 00:02:23
【问题描述】:
我有一个包含几个嵌套片段的活动。我在处理方向变化时遇到了很多麻烦。当 Activity 尝试重新创建自身导致应用程序崩溃时,某些事情是不正确的。如果我尝试在方向更改期间调试代码,则应用程序崩溃,而 logcat 中没有任何消息。
我的问题似乎是运行时试图在我不希望的情况下在我的 Activity 中重新创建片段。没有一个片段有 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}
为什么我的片段会自动重新创建?我能做些什么来强制重新加载活动,就好像应用程序在方向改变时第一次启动一样?这不是生命周期最初应该如何运作的吗?
如果需要,我可以添加任何代码。
【问题讨论】:
-
资源/布局是否正确? onCreateView 上的逻辑是否正确?我不会责怪 Android,首先要非常仔细地查看您的代码和布局。
-
据我所知。如果我将方向限制为纵向或横向,一切正常。如果 onCreateView 代码中有问题,那么我不明白为什么它没有被 catch 块捕获。我不明白为什么会自动重新创建片段,而不是在原始状态下重新创建活动,然后从那里重新加载片段。
-
“如果需要,我可以添加任何代码。”:这就是我们在这里的工作方式。除非您显示用于创建
Activity和Fragments的代码,否则很难给出解决方案。
标签: java android android-fragments