【发布时间】:2014-05-19 06:48:01
【问题描述】:
我被问到一个面试问题:片段可以在没有活动的情况下存在?我搜索了答案,但没有得到正确的答案和解释。有人可以帮忙吗?
【问题讨论】:
-
引用文档“片段不需要成为活动布局的一部分;您也可以使用没有自己的 UI 的片段作为活动的不可见工作人员”。只有在这种情况下,您才能将片段不附加到活动
我被问到一个面试问题:片段可以在没有活动的情况下存在?我搜索了答案,但没有得到正确的答案和解释。有人可以帮忙吗?
【问题讨论】:
是的,你可以在任何地方这样做:
new YourFragment();
因为片段必须有一个无参数的构造函数。
但是,它的lifecycle 在附加之前不会启动。所以onAttach、onCreate、onCreateView等只有在附加的时候才会被调用。所以大多数 Fragment 在附加之前什么都不做。
【讨论】:
它可以作为一个对象存在于内存中(通过使用new 创建它),但它需要附加到一个 Activity 才能出现在屏幕上,假设它有任何 UI(片段不必有用户界面)。
【讨论】:
Fragment 可以独立存在,但要显示它,需要 Activity 的帮助。 Activity 将充当 Fragment 的容器。
【讨论】:
fragment 不需要是Activity layout 的一部分;您也可以使用没有自己的UI 的fragment 作为Activity 的隐形工作者,但它需要附加到Activity 才能出现在屏幕上。
【讨论】:
一旦您创建了 Fragment 类的实例,它就存在,但为了让它出现在 UI 上,您必须将该片段附加到一个活动,因为一个片段的生命周期与活动的生命周期并行运行。如果不调用Activity的onCreate(),就不会调用fragment的onAttach()、onCreate()、onCreateView()和onActivityCreated(),因此无法启动。
【讨论】:
我阅读了上面评价最高的答案,我并不反对,但 android 已经提供了制作独立片段而没有活动 DialogFragment 的功能,它扩展了片段。如果你想全屏显示首先扩展 DialogFragment 然后
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
}
【讨论】:
Android 应用必须具有处理片段的 Activity 或 FragmentActivity。
没有Activity或FragmentActivity无法启动Fragment。
【讨论】: