我试图了解片段中的不良行为:即使片段在布局中不“可见”,也会调用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();
用片段替换带有片段fragmentDetail的FrameLayout,然后旋转设备,即使容器在纵向布局中不再存在,仍然会调用fragment方法。如果您使用“静态”<fragment>
标记,则不会发生这种情况。
如果使用静态片段,则会在片段出现时调用片段方法。是否可以在不使用fragment标签的情况下实现相同的行为?如果片段不在布局中,我需要一种避免渲染片段的方法。
由于
答案 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所以,如果你没有引用它们,它就不会让它们接近。它们由系统引用并独立生活。所以,你应该以某种方式完成它们。