繁体   English   中英

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

[英]Adding Fragments to a LinearLayout programmatically

我正在尝试将嵌套的子片段添加到父片段中。

一切正常,但是....

首先我的代码:

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就会加倍。 但是,仅当嵌套Fragments的容器是LinearLayout时才会显示。 如果容器是FrameLayout,则嵌套的Fragments不加倍。

怎么了

如果容器是FrameLayout,则嵌套的Fragments不加倍。

那可能不是真的。 新碎片更有可能只是位于旧碎片之上,从而有效地将它们遮盖了。 因此,潜在的问题可能是相同的,由于各种ViewGroup实现如何安排其子对象,视觉效果只是不同。

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

更具体地说,您可能需要向onCreateView()添加类似的内容:

if (savedInstanceState == null) createUI();

这样,仅当没有以前的状态可还原时才添加片段。 如果存在先前状态,则框架应恢复原来的片段。 在后一种情况下,可以通过按标签查找恢复的片段来处理它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM