与使用在不同布局中重用的自定义View
相比,使用Fragment
有什么优势?
在original blog post introducing fragments中,黛安·哈克伯恩说
片段使开发人员可以更轻松地编写应用程序,这些应用程序可以在平台中已有的工具之外的各种屏幕尺寸上进行缩放。
她继续解释了在为一个应用程序制作平板电脑布局的上下文中的片段,该应用程序结合了同一个应用程序的手机版本中两个活动的UI。
但似乎使用自定义视图也可以实现相同的重用。片段和视图之间的主要区别似乎在于它们具有不同的生命周期……
Fragment
的生命周期是:
onAttach()
、onCreate()
、onCreateView()
、onActivityCreated()
、onStart()
、onResume()
、onPause()
、onStop()
、onDestroyView()
、<代码>D15、<代码>D16。
View
的生命周期是:
ctor
、onFinishInflate()
、onAttachedToWindow()
、onMeasure()
、onLayout()
、onDetatchedFromWindow()
我想听听有编写大型应用程序经验的开发人员关于使用片段和自定义视图将UI划分为可重用的部分有什么好处(如果有的话)。
发布于 2013-02-17 00:43:42
主要原因是片段比自定义视图更具可重用性。
有时,您不能仅依靠视图来创建完全封装的UI组件。这是因为有一些东西你想放到你的视图中,但是不能,因为只有活动可以处理它们,因此在活动和视图之间强制紧密耦合。
这就是一个这样的例子。假设您想要创建一个可重用的UI组件,其中包括想要捕获一张照片并对其执行某些操作。传统上,你会发射一个意图,启动相机,并返回捕获的图像。
请注意,您的自定义UI组件不能完全封装此功能,因为它必须依赖于宿主活动的startActivityForResult,因为视图不接受活动结果(它们可以通过上下文间接触发意图)。
现在,如果您想在不同的活动中重用您的自定义UI组件,您将重复Activity.startActivityForResult的代码。
另一方面,片断干净利落地解决了这个问题。
类似地,您的片段可以向您的选项菜单贡献项目,这是传统上只有活动才能做的事情。同样,如果您的自定义视图的状态决定了菜单中的内容,那么这一点可能很重要。
发布于 2012-03-23 01:13:53
一个片段不仅仅是一个视图。事实上,它甚至可以完全看不到风景。它可以包含所有类型的东西,包括AsyncTasks、各种侦听器、文件和数据库访问等等。
可以将其视为一个小活动,但您可以在屏幕上显示多个它们,并与它们一起工作,包括在它们可见时相互通信。
例如,您可以在一个片段中显示购物车列表,在另一个片段中详细显示当前选择的购物车。然后,您可以在详细信息视图中更改项目的数量,列表视图可能会收到通知,并更新列表视图中的总价。你完全可以很好地编排这样的交互,同时在小屏幕设备上仍然只有一个是可见的。
我已经将一个大型业务应用程序(>15个活动)从活动重构为片段,以获得良好的平板电脑支持,并且我永远不会在没有片段的情况下启动新应用程序。
更新2016年2月:虽然上面的说法仍然成立,但碎片的复杂性导致许多人完全避免使用它们。更新的模式,如MVC方法的使用和更强大的视图,提供了替代方案。就像他们说的..。YMMV.
发布于 2012-03-23 01:37:56
一些描述:
把活动想象成一个盛着一块大蛋糕的盘子。Fragment是一个将相同的蛋糕切成小块的容器。每个片都包含自己的逻辑(侦听器等)。总体而言,它们与一个大蛋糕几乎没有什么不同。
好处:
就我的两分钱。:)
https://stackoverflow.com/questions/9827072
复制相似问题