我何时以及为什么要在Android应用程序中使用片段?

Cla*_*aro 105 android android-layout

我经常需要我的应用程序的不同部分有自己的特殊行为和UI,我不知道片段可以如何帮助.在大多数情况下,我认为创建2个不同的活动(例如,1个用于平板电脑,1个用于手机)以及分享第三类中的常见行为和事件更快.

所以,记住这一点,我为什么要使用片段?

Bob*_*Bob 77

在我看来,碎片更像是UI的好处.用户有时在同一屏幕上看到两个不同类的两个不同视图很方便.如果,在你的创造力的时刻,你决定用一个listView占据一半的屏幕和一个占据另一半的webView,那么当你点击一个列表项时,你会很高兴显示你的应用程序.片段它将一个意图传递给片段B中的webView,突然你看到你刚刚点击了没有应用程序切换活动的内容 - 然后你可以使用一个片段.这只是我想出的一个例子.

底线:片段是屏幕上同时进行的两项或多项活动.

  • 为什么在使用不同的父布局和不同的类可以完全相同的事情时使用片段?更容易拥有两个父布局,一个用于列表,另一个用于webview.我个人认为你的答案是不正确的,因为你只说明了用于什么片段,而不是为什么你应该使用它而不是一个主持两个类的活动.事实上,拥有一个活动并托管两个类更容易,因为您不需要处理意图和parcelable接口来序列化您希望传递的对象.你可以直接上课 (69认同)

e3m*_*eus 61

我在使用片段时看到的好处是:

  • 封装逻辑.
  • 更好地处理片段的生命周期.
  • 可重复用于其他活动.

我看到的缺点是:

  • 更多代码(例如,实例化片段管理器,添加片段事务,编写片段的回调)
  • 片段和活动之间的沟通更加困难.正如@jonney所说,你需要处理一个parcelable接口来序列化你希望传递的对象.

所以,在决定使用片段时,我会问自己以下问题:

  • 片段的生命周期是否与活动的生命周期不同?

如果生命周期不同,您可以使用片段更好地处理生命周期.例如,如果要销毁片段,而不是活动.当你有一个寻呼机适配器时就是这种情况.

  • 该片段是否会用于多个活动?

如果您使用片段,则用户输入事件将是可重用的.

  • 片段和活动之间的通信量是否很小?

如果需要将大对象传递给片段,则需要处理序列化它们的代码.此外,如果需要在片段和活动之间进行通信,则可能需要实现接口.在大多数情况下,这会增加代码库的复杂性.这不是一个差异制造者,而是一个需要考虑的标准.


zax*_*y78 19

Google建议您始终使用Fragments.

为什么?这很简单:

在最简单的情况下,Fragments像活动容器一样使用.

你为什么需要这个?再说一遍,这很简单.

Android 4(ICS)支持智能手机和平板电脑.这意味着SAME应用程序将在智能手机和平板电脑上运行,它们可能会非常不同.

平板电脑有大屏幕,空白或未使用 - 除非您正确分配.

这意味着 - 将两个片段放在一个活动上,如联系人列表和联系信息.

smatphone将显示联系人列表,并在触摸屏上显示联系人的信息.

在平板电脑上,用户仍会看到列表,信息旁边会显示.

2个片段 - 在一个屏幕上....

聪明?是的...应该是兼容到Android 1.6 ......


################################################## ###########

好的,已经知道了吗?那么 - 试着理解案例解决了:

很多东西都有这样的方式 - 列表和细节,菜单和子菜单,信息,详细信息和一些更详细的信息.您想要一种方法来保持平板电脑的自然和平滑,您希望通过这种方式进行预制,但不能指望智能手机能够像平板电脑一样显示它...

得到它?

有关更多信息,请查看此信息. 我真的认为你只需要抓住这个概念......

  • "谷歌建议你总是使用碎片."?我不同意.我个人认为只有当设备根据其大小设置一个窗格或两个窗格视图时才有用. (2认同)
  • 但是,在许多情况下,使用不同的视图布局时,没有解释为什么你可以做同样的事情.与op in一样,在很多情况下都没有看到片段的需要.过于复杂的imo.Ť (2认同)

小智 8

从历史上看,Android应用中的每个屏幕都是作为单独的Activity实现的.这在屏幕之间传递信息时产生了挑战,因为Android Intent机制不允许在活动之间直接传递引用类型(即对象).相反,必须序列化对象或提供可全局访问的引用.

通过使每个屏幕成为一个单独的片段,完全避免了这种数据传递的麻烦.片段始终存在于给定Activity的上下文中,并且始终可以访问该Activity.通过在Activity中存储感兴趣的信息,每个屏幕的片段可以通过Activity简单地访问对象引用.

https://softwareengineering.stackexchange.com/questions/244771/why-use-android-fragments