Android 以编程方式向线性布局添加片段

Android 以编程方式向线性布局添加片段,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,我试图将嵌套的子片段添加到父片段中 一切正常,但 首先,我的代码是: public class FragmentDatasheetWithHeader extends Fragment { private long mRowId; private String mSid; @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final

我试图将嵌套的子片段添加到父片段中

一切正常,但

首先,我的代码是:

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的活动打开时,应用程序进入后台并返回前台,嵌套的片段将加倍。但它仅在嵌套片段的容器是LinearLayout时出现。如果容器是FrameLayout,则嵌套片段不会加倍

怎么了

如果容器是FrameLayout,则嵌套片段不会加倍

这可能不是真的。更可能的情况是,新的碎片只是放在旧碎片的上面,有效地掩盖了它们。因此,潜在的问题可能是相同的,视觉效果是不同的,因为不同的
ViewGroup
实现如何安排它们的子对象

也就是说,有一种简单的方法可以判断您的片段是新“创建”的,还是从以前的状态“恢复”的:通过查看传递到
onCreateView()
Bundle savedInstanceState
参数(以及其他各种与生命周期相关的方法,如
onActivityCreate()
等)

更具体地说,您可能希望在
onCreateView()
中添加类似的内容:


这样,只有在没有以前的状态可从中恢复时,才会添加片段。如果存在以前的状态,框架应该恢复旧的片段。在后一种情况下,您可以通过标记查找恢复的片段来获得它们的句柄。

尝试用替换替换添加。这解决了我的问题,但现在我只看到最后一个片段,而不是两个片段:-(
if (savedInstanceState == null) createUI();