难以理解 Fragment 和 Activity

Trouble understanding Fragment and Activity

我是 Android 编程的初学者,很难理解 activity - 片段原理。 据我所知,片段类似于 "sub-activities",我可以在一个 activity 中添加多个片段,但我也可以有一个没有任何片段的 Activity。 问题 "why use fragments at all" 的答案可以在网上找到,也有一些关于这个主题的堆栈溢出问题。 但我的问题是:如果使用片段有优势——那为什么要使用活动呢? 如果片段是 "better" 并且我应该尽可能地使用它们,那么我所有的 Activity class 都是空的,片段会将内容带到屏幕上 - 这是最好的吗练习?

例如,如果我想添加一个菜单 - 我只能将它放在片段中,那么在 Activity class 中添加 setHasOptionsMenu() 有什么意义?

更具体一点:我应该在活动中放什么,在片段中放什么?

希望你能理解我的问题。

But my question is: If there are advantages in using fragments - why to use activities then?

因为你别无选择。活动是 Android 基金会的一部分。例如,您不能让启动器图标直接调用片段。

so what's the point in adding setHasOptionsMenu() in the Activity class?

在许多 UI 中,会有与任何特定片段无关的操作栏项目:"Settings"、"Help"、"About" 等在。在 activity.

中定义这些完全没问题

What should I put in activities, and what in fragments?

归根结底,只要它能可靠地编译、运行并做你想做的事,欢迎你做任何你想做的事。您可以粗略地将方法分为三个 "schools of thought" 片段。

最简单的是,"fragments are teh evilz and must be destroyed"。拥护者会使用其他东西(例如 Square 的 Flow 和 Mortar)作为替代。

比较复杂的是"use fragments where they prove useful"。 "useful"的定义,如同美,在于仁者见仁。因此,您会看到人们将片段用于:

  • master/detail 和类似的结构,以便更好地利用较大的屏幕尺寸,同时保持适应较小的屏幕
  • ViewPager
  • 中的页面
  • DialogFragment 用于处理配置更改和对话框
  • 等等

你现在的位置是第三流派:"Fragments Über Alles"。这种情况与 "where its useful" 情况的区别在于,即使在没有明确定义片段用途的情况下,您也会应用片段。例如,一个 HelpActivity,其唯一的 UI 由一个非常大的 WebView 组成,显示您的文档,不一定会从 WebView 的某些子类中受益 WebViewFragment。 "where its useful" 人们会跳过该片段,直到出现明确的需求(例如,您希望帮助与其他内容并排显示在大屏幕上的 activity 中) "Fragments Über Alles"追随者会一直使用 WebViewFragment