2012-01-27 85 views
2

我想了解片段中的不良行为:即使片段在布局中不可见,也会调用onCreateViewonActivityCreated方法。删除容器时不会删除动态添加的片段

如果使用的代码:

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

ID为fragmentDetail与片断取代的FrameLayout然后就旋转设备,片段方法仍然调用即使容器未在肖像了呈现布局。如果您使用'静态'<fragment>标记,则不会发生这种情况。 如果您使用静态片段,则片段方法在片段出现时被调用。是否有可能在不使用片段标签的情况下实现相同的行为?如果不在布局中,我需要一种避免渲染片段的方法。

谢谢

+0

这个问题可能是有用的http://stackoverflow.com/questions/6164341/handling-orientation-changes-with-fragments – 2012-01-27 22:25:09

回答

2

我找到了一个解决办法。这是从建议Handling orientation changes with Fragments略有不同:

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

这样就可以避免的情况下,当片段静态投入布局(在这种情况下,容器是空,但该方法isInLayout()返回true 顺便说一下,这对我来说仍然很奇怪。

0

AFAIK,片段工作几乎作为活动。他们有相同的生命周期。 http://developer.android.com/reference/android/app/Fragment.html#Lifecycle所以,如果你没有提及它们,它不会让它们靠近。它们被系统引用并自行生存。所以,你应该以某种方式完成它们。

+0

是的,我想删除没有出现在肖像中的片段,但我不知道如何。 – Matroska 2012-01-27 21:52:14

+0

通过FragmentManager删除片段 – Gangnus 2012-01-27 21:59:42

+0

popBackStack(String名称,int标志) 从管理器的片段回栈中弹出最后一个片段转换。 – Gangnus 2012-01-27 22:02:14