Android – 我需要一些片段与活动和意见的澄清
在Android API 11+中,Google发布了一个名为Fragment
的新类。
在video中,Googlebuild议尽可能(链接1,链接2),我们应该使用片段而不是活动,但是他们没有解释为什么。
碎片的目的和它们的一些可能的用途(除了一些简单的视图/布局可以轻易实现的UI示例之外)?
我的问题是关于碎片:
- 什么是使用片段的目的?
- 与使用活动/视图/布局相比,使用片段有哪些优缺点?
奖金问题:
- 你能给一些非常有趣的碎片使用吗? 谷歌没有在他们的video中提到的东西?
- 在片段和包含它们的活动之间进行通信的最佳方式是什么?
- 使用碎片时要记住什么是最重要的事情? 任何提示和警告从您的经验?
#1&#2使用片段的目的是什么?与使用activities / views / layouts相比,使用片段有哪些优缺点?
碎片是Android的解决scheme来创build可重用的用户界面。 您可以使用活动和布局来实现一些相同的function(例如使用includes)。 然而; 片段连接到HoneyComb的Android API上。 让我详细说一下。
-
ActionBar
。 如果你想在那里浏览你的应用程序,你很快就会看到ActionBar.TabListener
接口为你提供了一个FragmentTransaction
作为onTabSelected
方法的input参数。 你可以忽略这一点,做一些其他的事情,但是你会对付API,而不是使用它。 -
FragmentManager
以一种非常聪明的方式处理«返回»。 返回并不意味着回到最后的活动,就像常规活动一样。 这意味着回到以前的片段状态。 -
您可以使用带有
FragmentPagerAdapter
的酷炫ViewPager
来创build滑动界面。FragmentPagerAdapter
代码比常规的适配器清晰得多,它控制着单个片段的实例化。 -
如果您在尝试为手机和平板电脑创build应用程序时使用分段,您的生活将会变得更加轻松。 由于碎片与Honeycomb + API紧密相连,因此您也可以在手机上使用它们以重用代码。 这就是兼容性库派上用场的地方。
-
你甚至可以也应该使用片段的手机应用程序只。 如果你有可移植性的话。 我使用
ActionBarSherlock
和兼容性库来创build“ICS外观”应用程序,这些应用程序看起来与1.6版相同。 你得到最新的function,如ActionBar
,标签,溢出,拆分操作栏,viewpager等
奖金2
片段之间沟通的最佳方式是意图。 当你按Fragment中的某些东西时,通常会调用StartActivity()
和其上的数据。 意图被传递到您启动的活动的所有片段。
-
片段是一个活动的一部分,它为该活动贡献了自己的用户界面。 片段可以被认为是一个子活动。 与用户交互的完整屏幕称为活动。 一个活动可以包含多个片段。片段大多是活动的一个子部分。
-
根据屏幕大小,一个活动可能包含0或多个片段。 一个片段可以在多个活动中重用,所以它在活动中就像一个可重用的组件。
-
一个片段不能独立存在。 它应该永远是活动的一部分。 活动可以以任何片段存在。
不知道你指的是什么video,但是我怀疑他们说你应该使用片段而不是活动,因为它们不能直接互换。 开发指南中实际上有一个相当详细的条目 ,请仔细阅读。
简而言之,片段生活在活动中,每个活动可以容纳许多片段。 像活动一样,它们有一个特定的生命周期,与活动不同,它们不是顶级的应用程序组件。 片段的优点包括代码重用和模块化(例如,在许多活动中使用相同的列表视图),包括构build多窗格界面(主要用于平板电脑)的能力。 主要缺点是(一些)增加了复杂性。 一般来说,您可以通过(自定义)视图以非标准和较差的方式实现相同的function。
片段是一个应用程序的用户界面或行为的一部分,可以放在一个活动,使更多的模块化的活动devise。 如果我们说一个片段是一种子活动,那不会是错的。
以下是有关片段的重要观点:
-
片段拥有自己的布局和自己的行为,并拥有自己的生命周期callback。
-
活动正在运行时,您可以在活动中添加或移除碎片。
-
您可以在单个活动中合并多个片段以构build多窗格用户界面。
-
一个片段可以用于多个活动。
-
片段生命周期与其宿主活动的生命周期密切相关。
-
当活动暂停时,活动中可用的所有片段也将停止。
-
片段可以实现没有用户界面组件的行为。
-
在Android 3 (Honeycomb)中使用API版本11将碎片添加到Android API中。
欲了解更多详情,请访问官方网站Fragments 。
这是我在碎片上find的重要信息:
从历史上看,Android应用程序中的每个屏幕都是作为单独的Activity来实现的。 这会在屏幕之间传递信息时产生一个挑战,因为Android Intent机制不允许在活动之间直接传递引用types(即对象)。 相反,对象必须是序列化的或全球可访问的引用可用。
通过使每个屏幕成为一个单独的片段,这个数据传递头痛是完全避免的。 片段始终存在于给定的活动的上下文中,并且始终可以访问该活动。 通过在Activity中存储感兴趣的信息,每个屏幕的片段可以简单地通过Activity访问对象引用。
碎片在某些情况下特别有用,例如我们想在所有页面中保留导航抽屉的地方。 您可以使用任何您想要的片段膨胀框架布局,并仍然可以访问导航抽屉。
如果你使用过一个活动,你将不得不把抽屉放在所有的冗余代码的活动中。 这是片段的一个有趣的用法。
我是Android新手,仍然认为一个片段是有帮助的。
我知道这已经被讨论过了,但是我想补充一点:
-
碎片可以用来填充
Menu
并可以处理自己的MenuItem
点击。 从而为您的活动提供更多的调制选项。 你可以做ContextualActionBar的东西等没有你的活动知道它,并可以从基本的东西你的活动处理(导航/设置/关于)基本解耦。 -
有Frags的父Frag可以给你更多的选项来模块化你的组件。 例如,您可以轻松地将Frags换掉,将新的Frags放在寻呼机中或将其移除,重新排列它们。 所有没有你的活动知道任何关于它只是集中在更高层次的东西。
一个片段存在于一个活动中。
活动本身就是活的。
生活在活动中的碎片有:
- 它自己的生命周期
- 它自己的布局
- 自己的孩子碎片等
把碎片看作是它所属的主要活动的一个子活动,它不能独立存在,它可以一次又一次地被调用/重用。 希望这可以帮助 :)
1.使用片段的目的是什么?
- 答:
- 处理设备外形差异。
- 在应用程序屏幕之间传递信息。
- 用户界面组织。
- 高级用户界面隐喻。