使用Activity来启动片段会更好吗?

时间:2014-10-18 14:36:26

标签: android android-fragments

我一直遇到问题,只有一个Activity带有容器Fragment,然后根据需要替换它。这是正确的方法,还是每个Fragment都拥有自己的Activity

例如,使用PreferenceFragment可以接受来自MainActivity的此类内容:

fm.beginTransaction()
  .replace(R.id.container, new SettingsFragment())
  .addToBackStack(null)
  .commit();

或者最好是发布一个处理Activity交易的新SettingsActivity(例如Fragment)?

主要问题围绕旋转设备,但这是一个单独的问题。

3 个答案:

答案 0 :(得分:2)

这是怎么做的: 只有一个活动 - N-Number个片段!


对于您的问题would it be better to just launch a new Activity (e.g. SettingsActivity) that handles the Fragment transactions?

Ans ::您可以拥有一个活动,不需要其他活动!


最佳实践 :: 最好有一个活动和多个片段

原因 碎片为您提供了重用的优势,许多高级控件都可以处理碎片!

答案 1 :(得分:1)

活动通常是为单一目的服务的小程序。它们的范围可以从非常特定,小到相当复杂。片段是Activity的各个部分,旨在协同工作以完成Activity所需的所有工作。片段旨在做一件事,一件事。如果要显示文章,那就是它的作用。它不关心文章列表,或改变用户偏好或类似的东西。因此,如果您有一个仅用于展示文章的活动,那么这就是您唯一拥有的片段。

如果你为每个Activity使用一个片段,那么你基本上就是采用旧的做事方式(pre-fragment)。这绝对没有错。事情就是这样。它只会增加混乱,因为你将有一个Fragment文件和一个Activity文件以及其他东西。

所以一个很好的例子可能是Gallery应用程序。你最初会有一个活动,其中包含三个松散耦合的碎片,它会交换掉。

GalleryFragment - 显示可用的图片和视频列表。

PictureFragment - 显示放大并旋转功能的图片。

VideoFragment - 显示带有播放控件的视频。

就像Suhail Mehta所说,如果您的设计需要,您可以在平板电脑上一起显示这些碎片,而且您几乎无法改变。

稍后,您决定允许其他第三方通过隐式Intent共享您的Gallery应用。为此,您还要再做两项活动:

PictureActivity - 显示提供的图片。仅使用PictureFragment。

VideoActivity - 仅显示视频。仅使用VideoFragment。

因此,添加,删除和更新功能非常容易。

答案 2 :(得分:0)

每个片段都不应该有自己的活动。片段用于具有单一导航方法或具有多窗格UI。

片段必须始终嵌入到活动中,片段的生命周期直接受到主机活动生命周期的影响。但它并不意味着你将每个片段嵌入到新活动中,片段不是为了这个目的。

新闻应用程序可以使用一个片段显示左侧文章列表,另一个片段显示右侧文章 - 两个片段并排显示在一个活动中,每个片段都有自己的生命周期集回调方法并处理自己的用户输入事件。因此,用户可以选择文章并在同一活动中全部阅读,而不是使用一个活动来选择文章和另一个活动来阅读文章。

因此,正确的做法是根据您的UX / UI在活动中使用片段。