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

时间:2014-09-19 08:30:48

标签: android android-layout android-fragments

我遇到了非常奇怪的碎片问题。在我的情况下,我有片段放在活动中。它有两种类型的布局: 布局 - 带有list_container id的帧布局 layout-land - 有两个布局:list_containerdetail_container

当用户以纵向模式输入活动时,他会看到TestListFragment。当他点击其中一个列表元素TestDetailFragment时,会添加到backstack中。 接下来,当用户旋转屏幕TestDetailFragment从后台堆栈中移除并放置在ID为detail_container的布局中。出现奇怪的部分,在检查视图层次结构时,有两个list_containers(一个是空的,并且超出了导致视图重叠的其余内容)。 onActivityCreated中的TestFragment被触发两次。

我包括层次结构视图和屏幕:

源代码:

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

2 个答案:

答案 0 :(得分:1)

当您嵌套片段(即,片段托管片段)时,需要通过以下方式设置子片段:

  • 让父级片段膨胀包含<fragment>标签的布局

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

在这种情况下,问题中的代码使用的是getActivity().getSupportFragmentManager(),而不是getChildFragmentManager()

说实话,我不能完全理解这是如何导致所引用的症状,但根据对该问题的评论,它有所帮助。

答案 1 :(得分:0)

Android 检测轮换时,它会销毁正在运行的活动并创建一个新活动,因此如果您在onCreate()onDestroy()上有行为的活动,请记住。还要注意要处理其他事件的Fragment并且与附加的活动相关onAttach()