一个活动和所有其他碎片

Vin*_*kla 157 android android-layout android-lifecycle android-fragments android-activity

我想实现一个屏幕,Activity和所有其他sreens与Fragmentsmanaging all the fragments thru the activity.

这是个好主意吗?我的答案是否定的,但我仍然想更清楚地了解这个想法.

这个想法的优点和缺点是什么?

注意:

请不要给我片段和活动的链接.

编辑:

这是碎片和活动的一部分:

优点:

  1. 片段旨在与活动一起用作子活动.
  2. 碎片不是活动的替代品.
  3. 碎片意味着可重用性(需要知道可以以何种方式实现可重用性).
  4. 片段是编写代码以支持平板电脑和手机的最佳方式.

缺点:

  1. 我们需要实现接口以从片段中获取数据.
  2. 对于对话,我们必须走很长的路才能展示它.

如果我们不考虑平板电脑,为什么要使用碎片?活动和片段之间的起始时间差是多少?

Jus*_*ris 92

这取决于您正在创建的应用程序.我使用这两种方法创建了几个应用程序,但不能说一种方式总是优于另一种方式.我创建的最新应用程序使用了单一Activity方法和Facebook风格导航.从导航列表中选择项目时,我更新单个Fragment容器以显示该部分.

也就是说,单一Activity也会带来很多复杂性.假设您有一个编辑表单,对于用户需要选择或创建的某些项目,需要他们转到新屏幕.随着活动,我们只需要调用新的屏幕,startActivityForResultFragments有那么你最终存储的值没有这样的事情Activity,并具有主编辑片段检查Activity,看看数据是否已经被选中,并应显示给用户.

Aravind关于坚持单一Activity类型的说法也是如此,但并非真正限制.您的活动将是FragmentActivity,只要您不需要,MapView那么就没有实际限制.如果您确实想要显示地图,可以这样做,但您需要修改Android兼容性库以FragmentActivity扩展MapActivity或使用公开的android-support-v4-googlemaps.

最终,我所知道的大多数开发Activity人员已经回到了多个活动以简化他们的代码.UI智能,在平板电脑上,你有时会被困在一个Activity只是为了实现你的设计师提出的任何疯狂的互动:)

- 编辑 -

Google终于发布MapFragment了兼容性库,因此您不再需要使用android-support-v4-googlemaps hack.在此处阅读有关此更新的信息:Google Maps Android API v2

- 编辑2 -

我刚读了这篇关于现代(2017)碎片状态的精彩帖子,并记得这个老答案.以为我会分享:片段:Android所有问题的解决方案

  • 有`settargetfragment`,你可以处理像`startforresult`程序这样的活动. (6认同)

Tam*_*mas 83

我即将完成一个项目(开发5个月),有1个活动,17个片段,全屏.这是我的第二个基于片段的项目(之前是4个月).

优点

  • 主要活动是700行代码,只是很好地管理片段导航的顺序.
  • 每个片段都很好地分成了它自己的类,并且相对较小(〜几百行ui的东西).
  • 管理层可以说,"嘿,我们如何切换这些屏幕的顺序",我可以很容易地做到,因为这些片段不依赖于彼此,它们都通过活动进行通信.我不需要挖掘个人活动,找到他们互相称呼的地方.
  • 我的应用程序图形很重,永远不会作为1屏幕1活动.内存中的所有子活动都会使应用程序一直耗尽内存,因此我将不得不进行finish()所有不可见的活动,并使用相同的控制逻辑进行导航,就像我对碎片所做的那样.不管是因为这个原因,还是可以用片段来做.
  • 如果我们做一个平板电脑应用程序,我们将有一个更容易的时间重新分解东西,因为一切都很好地分开了.

缺点

  • 你必须学习,如何使用碎片

  • 700线!!!! "好听" ???? 课程是免费的. (9认同)
  • @Tamas这种方法非常反对android.你最终得到了GOD课程.Android系统旨在用于处理活动 - 例如,您没有很好的方法来处理多个片段中的工具栏.你没有结果的开始片段,还有更多的没有.这意味着你必须重写已经存在的整个逻辑.那么本地广播接收器,服务和其他Android组件呢.要启动服务,您必须执行以下操作:getActivity()!= null ...这真的很难看.如果你有很多fr,片段之间的通信也很奇怪. (7认同)

bep*_*aya 16

首先,无论您做什么,请确保使用模型,视图,演示者进行模块化设计,而不是高度依赖于Activity或Fragment.

活动和碎片真正提供了什么?

  1. 生命周期事件和后台堆栈
  2. 背景和资源

因此,只能使用它们.他们有足够的责任,不要过度复杂化.我认为即使在Activity或Fragment中对TextView进行实例化也是不好的做法.我们有理由方法,如一个公共景观findViewById(INT ID)PUBLIC.

现在问题变得更简单了:我是否需要多个独立的生命周期事件和后台堆栈?如果您认为可能,请使用碎片.如果您从未想过,请不要使用碎片.

最后,你可以制作自己的背包和生命周期.但是,为什么重新创造轮子?

编辑:为什么要投票呢?单人课程的人!每个活动或片段都应该能够实例化实例化视图的演示者.演示者和视图是可以互换的模块.为什么活动或片段应由演示者负责?

  • 放开MVP吧,如果没有Android,你会更好.您可以花费大量时间尝试通过一个不同形状的孔来装置某个形状块,确定这是一个挑战,但可能需要花费时间的功能要求. (3认同)

Sah*_* Mj 12

优点

您可以从单个活动控制您的片段,因为所有片段彼此独立.该片段有一个生命周期(onPause,onCreate,onStart自己的...).通过生命周期,片段可以独立响应事件,保存状态onSaveInstanceState并被带回(例如,在来电后或用户单击后退按钮时恢复).

缺点

  1. 在您的活动代码中创建复杂性.
  2. 您必须管理片段的顺序.

从来没有这样,这是一个非常好的主意,就像你需要创建一个应用程序,你想要显示几个视图.通过这个想法,您将能够在单个视图中查看多个片段.


Ski*_*Ski 1

优点:

  • 可用于通过 xml 布局创建可供多种屏幕尺寸和方向使用的单一界面。

缺点:

  • 您的活动中需要更复杂的代码。

我相信这是一个好主意,因为如果您计划为手机和平板电脑发布应用程序,那么根据当前屏幕尺寸和方向使用不同的 xml 布局可以使应用程序更可用,并减少发布多个版本的应用程序的需要。如果您的应用程序永远不会同时被平板电脑和手机使用,那么可能不值得这么麻烦。