移除容器时不会移除动态添加的片段

时间:2012-01-27 21:31:26

标签: android android-fragments

我试图了解片段中的不良行为:即使片段在布局中不“可见”,也会调用onCreateViewonActivityCreated方法。

如果您使用代码:

TestFragment testFragment = new TestFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragmentDetail, testFragment, "test");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();

用片段替换带有片段fragmentDetail的FrameLayout,然后旋转设备,即使容器在纵向布局中不再存在,仍然会调用fragment方法。如果您使用“静态”<fragment>标记,则不会发生这种情况。 如果使用静态片段,则会在片段出现时调用片段方法。是否可以在不使用fragment标签的情况下实现相同的行为?如果片段不在布局中,我需要一种避免渲染片段的方法。

由于

2 个答案:

答案 0 :(得分:2)

我找到了一个解决方法。它与建议的Handling orientation changes with Fragments略有不同:

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
     if (!fragment.isInLayout() && container == null) return null;
     ...
     }

通过这种方式,您可以避免将片段静态放入布局中(在这种情况下容器为null但方法isInLayout()返回true)。 顺便说一下,这种行为对我来说仍然很奇怪。

答案 1 :(得分:0)

AFAIK,片段几乎像活动一样工作。它们具有相同的生命周期。 http://developer.android.com/reference/android/app/Fragment.html#Lifecycle所以,如果你没有引用它们,它就不会让它们接近。它们由系统引用并独立生活。所以,你应该以某种方式完成它们。