为什么要使用Android Fragments?


15

我已经阅读了有关该主题的文档和其他一些问题的主题,但我并没有真正感到信服。我看不出使用此技术的局限性。

片段现在被视为最佳实践 ; 基本上,每个活动都应该是对一个或多个片段的支持,而不是直接调用布局。

创建片段是为了:

  1. 允许Activity使用多个片段,在它们之间进行切换,重用这些单元... ==> Fragment完全依赖于ContextActivity的,因此,如果我需要可以在许多Activity中重用和处理的通用类,创建自己的自定义布局或视图...我不会在意片段会添加的这个额外的复杂性开发层。

  2. 对于平板电脑/手机,更好地处理不同分辨率==>确定,以防长时间处理,我们可以在平板电脑的“同一活动”中显示两个(或多个)片段,在手机中一个一个地显示。但是为什么我总是使用片段?

  3. 处理在片段之间导航的回调(即:如果用户已登录,则显示一个片段,否则显示另一个片段)。===>试着看看有多少bug导致了Facebook SDK登录,以了解它确实是(?)...

  4. 考虑到Android应用程序是基于活动的...在活动中添加另一个生命周期会更好地设计应用程序...我的意思是模块,方案,数据管理和连接性会得到更好的设计,因为办法。===>这是一个曾经用Fragments愿景看过Android SDK和Android Framework的人的答案。我不认为这是错误的,但是我不确定它是否会产生良好的结果。而且它真的很抽象。

====>为什么总是使用它们会使我的生活变得复杂,编写更多代码?否则,如果它只是某些情况下的工具,那为什么是最佳实践呢?这些情况是什么?


1
目前尚不清楚您在问什么,能否请您总结一下问题,也许是在列举优点和对每个优点的批评之后?
logc 2014年

我添加了一个详细的问题。
ahmed_khan_89 2014年

我迷路了@logc。您如何处理没有片段的情况?
neontapir 2014年

我给出了没有片段的方法:(1)创建自定义的通用控件并在需要的地方重复使用它们(2)使用2个Activity并使用startActivityForResult进行导航,或者只是在视图之间进行切换(显示/隐藏,放大/删除...)无需编写太多代码...(3)即使在带有视图的活动中也可以使用回调(4)这是我在讨论此主题时总是得到的抽象答案……这需要更多说明...
ahmed_khan_89

1
嗯 此问答显示了stackexchange设计的局限性,原始海报选择了“最佳”答案。(相对于slant.co,每个人都可以投票。)对于像这样的广泛问题并不理想。在这里,一个模糊的问题得到了一个被接受的答案,显然与提问者想听到的内容相吻合。如果您没有理由在自己的情况下使用片段,请不要使用。一个更好的问题是询问片段活动的利弊。在这个确切的主题上有很多话题。
ToolmakerSteve

Answers:


5

片段是活动的模块化部分,具有自己的生命周期,接收自己的输入事件,您可以在活动运行时添加或删除这些事件(类似于“子活动”,可以在不同的活动中重复使用)

除了在不同屏幕上使用片段和UI优化这一明显优势外,它还使您可以在没有可见用户界面组件的情况下管理活动的后台处理。

现在...

====>为什么我会使我的生活变得复杂,编写更多代码???

尽管已建议,但除非计划控制单个元素的生命周期和/或重新使用堆栈状态或先前视图的历史记录,否则无需这样做。


5

如果碎片怀疑论者有一个“网关”用例,那很可能是对话。早已弃用的方法showDialog(...)onCreateDialog(...)等等,很好,因为当宿主活动被破坏并重新创建时,框架会调用它们来自动破坏并重新创建对话框。如果直接创建自己的对话框,则必须自己管理所有这些内容。但是,如果使用DialogFragment,则可以再次让框架为您管理它们。在这种情况下,片段可以大大简化您的编码。


1

一年多以前,我问了这个问题。

我每天都在使用碎片,我会推荐它。

首先,我想说的是,使用片段只是一种选择,当您开始使用它们时,便会考虑它。

优点:

1 /它有助于对代码进行模块化,使您可以在一个Activity中以单独的片段完整地查看代码。例如:+列表/网格和详细信息,+登录和注册&忘记密码,+等等。这真是一个可重用的代码,您可以始终在不同的项目中复制和使用它。

2 /您将拥有一个新的生命周期,充满了确实的麻烦,但同时也具有优势。示例:保留的实例片段很棒,因为它解决了定向问题。

3 /您可以通过活动中的事件和侦听器来管理片段的流程。

4 /一堆活动中的片段。

5 /在许多屏幕中使用相同的操作栏。

还有很多

有时,我仍然仅将Activity用作唯一的容器,尤其是对于Camera案例。某些Android API和某些第三方库不容易分段实现。

好吧,就像任何工具一样,您必须考虑它,并自己判断在案件中还是在另一个案件中使用它是否更好。

我希望这可以帮助!!!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.