【问题标题】:Fragment without activity没有活动的片段
【发布时间】:2014-05-19 06:48:01
【问题描述】:

我被问到一个面试问题:片段可以在没有活动的情况下存在?我搜索了答案,但没有得到正确的答案和解释。有人可以帮忙吗?

【问题讨论】:

  • 引用文档“片段不需要成为活动布局的一部分;您也可以使用没有自己的 UI 的片段作为活动的不可见工作人员”。只有在这种情况下,您才能将片段不附加到活动

标签: android android-fragments


【解决方案1】:

是的,你可以在任何地方这样做:

new YourFragment();

因为片段必须有一个无参数的构造函数。

但是,它的lifecycle 在附加之前不会启动。所以onAttachonCreateonCreateView等只有在附加的时候才会被调用。所以大多数 Fragment 在附加之前什么都不做。

【讨论】:

  • 有人问我一个服务是否可以有 Fragment。我说是的,他很惊讶。但是应该记住,一个人可以拥有 Fragment 并调用它的任何方法,但正如@weston 所提到的,它的生命周期在附加到 Activity 之前不会启动。此外,需要一个 FragmentManager 实例来管理它们(这只能在 Activity 中实现)。
  • 请分享一个正确的示例链接。
【解决方案2】:

它可以作为一个对象存在于内存中(通过使用new 创建它),但它需要附加到一个 Activity 才能出现在屏幕上,假设它有任何 UI(片段不必有用户界面)。

【讨论】:

    【解决方案3】:

    Fragment 可以独立存在,但要显示它,需要 Activity 的帮助。 Activity 将充当 Fragment 的容器。

    【讨论】:

      【解决方案4】:

      fragment 不需要是Activity layout 的一部分;您也可以使用没有自己的UIfragment 作为Activity 的隐形工作者,但它需要附加到Activity 才能出现在屏幕上。

      【讨论】:

        【解决方案5】:

        一旦您创建了 Fragment 类的实例,它就存在,但为了让它出现在 UI 上,您必须将该片段附加到一个活动,因为一个片段的生命周期与活动的生命周期并行运行。如果不调用Activity的onCreate(),就不会调用fragment的onAttach()、onCreate()、onCreateView()和onActivityCreated(),因此无法启动。

        【讨论】:

          【解决方案6】:

          我阅读了上面评价最高的答案,我并不反对,但 android 已经提供了制作独立片段而没有活动 DialogFragment 的功能,它扩展了片段。如果你想全屏显示首先扩展 DialogFragment 然后

          @Override
          public void onCreate(Bundle savedInstanceState)
          {
          
              super.onCreate(savedInstanceState);
              setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
          
          }
          

          【讨论】:

            【解决方案7】:

            Android 应用必须具有处理片段的 Activity 或 FragmentActivity。

            没有Activity或FragmentActivity无法启动Fragment。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多