删除容器时不会删除动态添加的片段
问题描述:
我想了解片段中的不良行为:即使片段在布局中不可见,也会调用onCreateView
和onActivityCreated
方法。删除容器时不会删除动态添加的片段
如果使用的代码:
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>
标记,则不会发生这种情况。 如果您使用静态片段,则片段方法在片段出现时被调用。是否有可能在不使用片段标签的情况下实现相同的行为?如果不在布局中,我需要一种避免渲染片段的方法。
谢谢
答
我找到了一个解决办法。这是从建议Handling orientation changes with Fragments略有不同:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (!fragment.isInLayout() && container == null) return null;
...
}
这样就可以避免的情况下,当片段静态投入布局(在这种情况下,容器是空,但该方法isInLayout()返回true 顺便说一下,这对我来说仍然很奇怪。
答
AFAIK,片段工作几乎作为活动。他们有相同的生命周期。 http://developer.android.com/reference/android/app/Fragment.html#Lifecycle所以,如果你没有提及它们,它不会让它们靠近。它们被系统引用并自行生存。所以,你应该以某种方式完成它们。
这个问题可能是有用的http://stackoverflow.com/questions/6164341/handling-orientation-changes-with-fragments – 2012-01-27 22:25:09