以编程方式将片段添加到LinearLayout

时间:2013-08-30 23:33:17

标签: 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 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,则嵌套的片段不会加倍。

出了什么问题?

1 个答案:

答案 0 :(得分:2)

  

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

这可能不是真的。新片段更有可能只是坐在旧片段的顶部,有效地遮挡它们。因此,潜在的问题可能是相同的,视觉效果是不同的,因为各种ViewGroup实现如何安排他们的孩子。

话虽如此,有一种简单的方法可以判断您的片段是从新的状态“创建”还是“恢复”:通过查看传递给{{1的Bundle savedInstanceState参数(和其他各种生命周期相关的方法,如onCreateView()等。)。

更具体地说,您可能希望将此类内容添加到onActivityCreate()

onCreateView()

这样,只有在没有要恢复的先前状态时才会添加片段。如果存在先前的状态,则框架应该恢复旧的片段。在后一种情况下,您可以通过标记查找已恢复的片段来处理它们。