我遇到了非常奇怪的碎片问题。在我的情况下,我有片段放在活动中。它有两种类型的布局:
布局 - 带有list_container
id的帧布局
layout-land - 有两个布局:list_container
和detail_container
。
当用户以纵向模式输入活动时,他会看到TestListFragment
。当他点击其中一个列表元素TestDetailFragment
时,会添加到backstack中。
接下来,当用户旋转屏幕TestDetailFragment
从后台堆栈中移除并放置在ID为detail_container
的布局中。出现奇怪的部分,在检查视图层次结构时,有两个list_containers(一个是空的,并且超出了导致视图重叠的其余内容)。 onActivityCreated
中的TestFragment
被触发两次。
我包括层次结构视图和屏幕:
源代码:
这是正常行为吗?如何摆脱这种布局?
答案 0 :(得分:1)
当您嵌套片段(即,片段托管片段)时,需要通过以下方式设置子片段:
让父级片段膨胀包含<fragment>
标签的布局
在执行getChildFragmentManager()
以添加子片段时让父片段使用FragmentTransaction
在这种情况下,问题中的代码使用的是getActivity().getSupportFragmentManager()
,而不是getChildFragmentManager()
。
说实话,我不能完全理解这是如何导致所引用的症状,但根据对该问题的评论,它有所帮助。
答案 1 :(得分:0)
当 Android 检测轮换时,它会销毁正在运行的活动并创建一个新活动,因此如果您在onCreate()
和onDestroy()
上有行为的活动,请记住。还要注意要处理其他事件的Fragment
并且与附加的活动相关onAttach()