【问题标题】:What are the advantages of creating a Fragment vs Extending a View or ViewGroup?创建片段与扩展视图或视图组有什么优势?
【发布时间】:2014-01-10 17:21:59
【问题描述】:

我们最近将一款应用从基于多个 Activity 的应用转换为具有单个 Activity 和多个片段的应用。成为 Fragment 的 Activity 用于包含 Fragment 本身,因此我们使用子 Fragment 管理器来托管 Fragments 中的 Fragment(我应该添加的这些子 Fragment 很小,一次屏幕上可能有 4 或 5 个)。

这导致了一些问题,即必须为片段持有者创建和跟踪唯一 ID。 (这在处理 Backstack 以及任何类型的 AdapterView 中都会引起头痛)。

我们正在考虑重写这些组件以扩展某种 ViewGroup,可能是 FrameLayout 或 LinearLayout。无论如何,在某些情况下我们已经这样做了,但我想知道这样做是否有任何缺点?(我必须承认,我真的不认为 Fragments 有什么大不了的...任何你可以用 Fragments 做的事情,你都可以通过创建一个自定义视图来做。这是错误的吗?)。

【问题讨论】:

  • 好吧,就它们而言,片段不必附加视图,因此它可以用作后台工作者,也可以在许多活动中重用。我不知道这是否意味着你错了,我想你可能是对的,片段可选的。我知道,正如您可能刚刚发现的那样,事后添加它们是地狱。
  • @BobbyDigital - 我已经看到该解释被引用了几次(re:片段的可选视图,因为它们可以用于后台操作),但这有什么比POJO,或者扩展 AsyncTask 的类,如果这是必需的?
  • 你找到我了。我认为这实际上是做事的“标准”方式。我正在从一本强调始终使用它们但基本上说它是“现实生活”中最常用的模式的书中学习 android,而不是因为尝试稍后添加它们而跌跌撞撞地从一开始就这样做。所以我的扩展 SingleFragmentActivity 类的活动除了return new MyFragment(); 什么都不做。 ??
  • 我真的不认为 Fragments 有什么大不了的……任何你可以用 Fragments 做的事情,你都可以通过创建一个自定义视图来做。 - 重要的是片段是您由 SDK 支持的。仅使用自定义视图,您需要处理所有事情,就我个人而言,我会发现使用片段并使其工作更麻烦。

标签: android android-fragments android-activity


【解决方案1】:

这有点相反,解释了片段的使用。一般情况下,Activity 可以做大部分事情,但是由于 SDK 支持 Fragment,很多事情会变得比较麻烦(ViewPager 就是一个很好使用 Fragment 的例子)。

(片段的)优点:代码封装、可重用的 UI 块。

(片段的)缺点:更多代码(例如 FragmentManager、FragmentTransaction)。

你原来对活动的使用很好,我不会切换到片段。

假设我设计了一个包含两个活动的手机应用程序:ContactList 和 ContactDetails。到目前为止一切顺利,还没有理由使用片段。如果我想支持更大的设备,我应该并排显示两个屏幕。这就是碎片派上用场的地方。关于如何构建活动/片段,这里有一些很好的建议:

https://developer.android.com/guide/practices/tablets-and-handsets.html#Fragments

以下是重要的部分:

多个片段,一个活动:

使用一项活动,而不管 设备大小,但在运行时决定是否在 布局(创建多窗格设计)或交换片段(创建 单窗格设计)。

或者……

多个片段,多个活动:

在平板电脑上,将多个片段放置在一个活动中;在手机上, 使用单独的活动来托管每个片段。例如,当 平板设计在一个activity中使用了两个fragment,使用同一个activity 用于手机,但提供了一种替代布局,其中仅包括 第一个片段。在手机上运行时需要切换 片段(例如当用户选择一个项目时),开始另一个 承载第二个片段的活动。

.

您选择的方法 取决于您的设计和个人喜好。第一个选项(一个 活动;交换片段)需要您确定屏幕 运行时的大小并动态添加每个片段 适当的——而不是在活动的 XML 中声明片段 布局——因为你不能从一个活动中移除一个片段,如果它是 在 XML 布局中声明。使用第一种技术时,您 每次片段可能还需要更新操作栏 更改,具体取决于可用的操作或导航模式 对于每个片段。在某些情况下,这些因素可能不会影响您的 设计,因此使用一个活动并交换片段可能会很好 (特别是如果您的平板电脑设计要求您添加片段 无论如何都是动态的)。然而,其他时候,动态交换 您的手机设计的片段可以使您的代码更复杂, 因为您必须管理 活动的代码(而不是使用替代布局资源来 定义片段组合)并管理片段的回栈 自己(而不是让正常的活动堆栈来处理 后退导航)。

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    相关资源
    最近更新 更多