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()
解决了我的问题。谢谢你能把这个评论作为答案吗?