Android 奇怪的片段行为-屏幕旋转后视图层次结构中的空容器

Android 奇怪的片段行为-屏幕旋转后视图层次结构中的空容器,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,我遇到了非常奇怪的碎片问题。在我的例子中,我有一个片段,它被放置在活动中。它有两种类型的布局: 布局-带有list\u容器的框架布局 布局平台-具有两种布局:列出容器和详细说明容器 当用户以纵向模式进入活动时,他会看到TestListFragment。当他单击其中一个列表元素时,TestDetailFragment被添加到backstack。 接下来,当用户旋转屏幕时,屏幕TestDetailFragment将从backstack中移除,并放置在id为detail\u容器的布局中。检查视图层次结

我遇到了非常奇怪的碎片问题。在我的例子中,我有一个片段,它被放置在活动中。它有两种类型的布局: 布局-带有
list\u容器的框架布局
布局平台-具有两种布局:
列出容器
详细说明容器

当用户以纵向模式进入活动时,他会看到
TestListFragment
。当他单击其中一个列表元素时,
TestDetailFragment
被添加到backstack。 接下来,当用户旋转屏幕时,屏幕
TestDetailFragment
将从backstack中移除,并放置在id为
detail\u容器的布局中。检查视图层次结构时,有两个列表容器(一个是空的,位于其余内容上方,导致视图重叠),这看起来有多奇怪<在
TestFragment
中创建的code>onActivityCreated
被触发两次

我包括层次视图和屏幕:

源代码:

  • 带有片段的活动:
  • 活动布局:
  • 测试片段布局:
  • 测试碎片布局用地:

这是正常的行为吗?如何摆脱这种布局?

当Android检测到旋转时,它会破坏正在运行的活动并创建一个新的活动,因此如果您在活动的
onCreate()
onDestroy()
上有行为,请记住这一点。还要注意
Fragment
,它还有一个要管理的事件,并且与附加的活动
onAttach()

相关。当您嵌套片段(即,有一个片段宿主一个片段)时,需要通过以下方式设置子片段:

  • 让父片段膨胀包含
    标记的布局

  • 让父片段在执行
    FragmentTransaction
    时使用
    getChildFragmentManager()
    添加子片段

在本例中,问题中的代码使用的是
getActivity().getSupportFragmentManager()
,而不是
getChildFragmentManager()


老实说,我无法完全理解这是如何导致上述症状的,但根据对该问题的评论,这是有帮助的。

您没有正确使用嵌套片段。您需要使用
TestFragment
getChildFragmentManager()
来添加其嵌套片段,而您使用的是活动的
getSupportFragmentManager()
。我还将根据片段是否存在而不是
savedInstanceState
是否为
null
来决定添加片段。我不确定这两者是否与您的问题直接相关。@commonware将
getSupportFragmentManager()
替换为
getChildFragmentManager()
解决了我的问题。谢谢你能把这个评论作为答案吗?