我正在尝试将嵌套的子片段添加到父片段中。
一切正常,但......
首先我的代码:
public class FragmentDatasheetWithHeader extends Fragment {
private long mRowId;
private String mSid;
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
final ScrollView scrollView = new ScrollView(getActivity());
final LinearLayout linearLayout = new LinearLayout(getActivity());
linearLayout.setId(4711);
linearLayout.setOrientation(LinearLayout.VERTICAL);
scrollView.addView(linearLayout);
createUI();
return scrollView;
}
private void createUI() {
final FragmentProductDetailHeader fragmentHeader = FragmentProductDetailHeader.newInstance(this.mRowId, FragmentProductDetailHeader.HEADERTYPE_SMALL);
final FragmentDatasheet fragmentDatasheet = FragmentDatasheet.newInstance(this.mRowId, this.mSid);
final FragmentManager fragmentManager = getChildFragmentManager();
fragmentManager.beginTransaction().add(4711, fragmentHeader, "fragmentHeader").commit();
fragmentManager.beginTransaction().add(4711, fragmentDatasheet, "fragmentDatasheet").commit();
}
}
现在我的问题:
在我激活的开发者选项中"不要保留活动(一旦用户离开就销毁每个活动)"
当FragmentDatasheetWithHeader的活动打开并且应用程序进入后台并回到前台时,嵌套的碎片会加倍。但只有嵌套Fragments的容器是LinearLayout才会出现。如果容器是FrameLayout,则嵌套的片段不会加倍。
出了什么问题?
答案 0 :(得分:2)
如果容器是FrameLayout,则嵌套的片段不会加倍。
这可能不是真的。新片段更有可能只是坐在旧片段的顶部,有效地遮挡它们。因此,潜在的问题可能是相同的,视觉效果是不同的,因为各种ViewGroup
实现如何安排他们的孩子。
话虽如此,有一种简单的方法可以判断您的片段是从新的状态“创建”还是“恢复”:通过查看传递给{{1的Bundle savedInstanceState
参数(和其他各种生命周期相关的方法,如onCreateView()
等。)。
更具体地说,您可能希望将此类内容添加到onActivityCreate()
:
onCreateView()
这样,只有在没有要恢复的先前状态时才会添加片段。如果存在先前的状态,则框架应该恢复旧的片段。在后一种情况下,您可以通过标记查找已恢复的片段来处理它们。