Android - 我需要一些片段与活动和意见的澄清


在Android API 11+中,Google发布了一个名为Fragment的新类。

在视频中,Google建议尽可能( link1link2 ),我们应该使用片段而不是活动,但是他们没有解释为什么。

碎片的目的和它们的一些可能用途(除了一些简单的视图/布局可以轻易实现的UI示例之外)?

我的问题是关于碎片:

  1. 什么是使用片段的目的?
  2. 与使用活动/视图/布局相比,使用片段有哪些优缺点?

奖金问题:

  1. 你能给一些非常有趣的碎片使用吗? 谷歌没有在他们的视频中提到的东西?
  2. 在片段和包含它们的活动之间进行通信的最佳方式是什么?
  3. 使用碎片时要记住什么是最重要的事情? 任何提示和警告从您的经验?


Answers


#1&#2使用片段的目的是什么?与使用activities / views / layouts相比,使用片段有哪些优缺点?

碎片是Android的解决方案来创建可重用的用户界面。 您可以使用活动和布局来实现一些相同的功能(例如使用includes)。 然而; 片段连接到HoneyComb的Android API上。 让我详细说一下。

  • ActionBar 。 如果你想在那里浏览你的应用程序,你很快就会看到ActionBar.TabListener接口为你提供了一个FragmentTransaction作为onTabSelected方法的输入参数。 你可以忽略这一点,做一些其他的事情,但是你会对付API,而不是使用它。

  • FragmentManager以一种非常聪明的方式处理«返回»。 返回并不意味着回到最后的活动,就像常规活动一样。 这意味着回到以前的片段状态。

  • 您可以使用带有FragmentPagerAdapter的酷炫ViewPager来创建滑动界面。 FragmentPagerAdapter代码比常规的适配器清晰得多,它控制着单个片段的实例化。

  • 如果您在尝试为手机和平板电脑创建应用程序时使用分段,您的生活将会变得更加轻松。 由于碎片与Honeycomb + API紧密相连,因此您也可以在手机上使用它们以重用代码。 这就是兼容性库派上用场的地方。

  • 你甚至可以也应该使用片段的手机应用程序只。 如果你有可移植性的话。 我使用ActionBarSherlock和兼容性库来创建“ICS外观”应用程序,这些应用程序看起来与1.6版相同。 你得到最新的功能,如行动条,标签,溢出,拆分操作栏,viewpager等

奖金2

片段之间沟通的最佳方式是意图。 当你按Fragment中的某些东西时,通常会调用StartActivity()和其上的数据。 意图被传递到您启动的活动的所有片段。




  1. 片段是一个活动的一部分,它为该活动贡献了自己的用户界面。 片段可以被认为是一个子活动。 与用户交互的完整屏幕称为活动。 一个活动可以包含多个片段。片段大多是活动的一个子部分。

  2. 根据屏幕大小,一个活动可能包含0或多个片段。 一个片段可以在多个活动中重用,所以它在活动中就像一个可重用的组件。

  3. 一个片段不能独立存在。 它应该永远是活动的一部分。 活动可以以任何片段存在。




不知道你指的是什么视频,但是我怀疑他们说你应该使用片段而不是活动,因为它们不能直接互换。 开发指南中实际上有一个相当详细的条目 ,请仔细阅读。

简而言之,片段生活在活动中,每个活动可以容纳许多片段。 像活动一样,它们有一个特定的生命周期,与活动不同,它们不是顶级的应用程序组件。 片段的优点包括代码重用和模块化(例如,在许多活动中使用相同的列表视图),包括构建多窗格界面(主要用于平板电脑)的能力。 主要缺点是(一些)增加了复杂性。 一般来说,您可以通过(自定义)视图以非标准和较差的方式实现相同的功能。




片段是一个应用程序的用户界面或行为,可放置在一个活动,使更多的模块化的活动设计的一块。 如果我们说一个片段是一种子活动,这不会是错误的。

以下是有关片段的重要观点:

  1. 片段拥有自己的布局和自己的行为,并拥有自己的生命周期回调。

  2. 活动正在运行时,您可以在活动中添加或移除碎片。

  3. 您可以在单个活动中合并多个片段以构建多窗格用户界面。

  4. 一个片段可以用于多个活动。

  5. 片段生命周期与其宿主活动的生命周期密切相关。

  6. 当活动暂停时,活动中可用的所有片段也将停止。

  7. 片段可以实现没有用户界面组件的行为。

  8. Android 3 (Honeycomb)中使用API​​版本11将碎片添加到Android API中。

欲了解更多详情,请访问官方网站Fragments




这是我在碎片上找到的重要信息:

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

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




碎片在某些情况下特别有用,例如我们想在所有页面中保留导航抽屉的地方。 您可以使用任何您想要的片段膨胀框架布局,并仍然可以访问导航抽屉。

如果你使用过一个活动,你将不得不把抽屉放在所有的冗余代码的活动中。 这是片段的一个有趣的用法。

我是Android新手,仍然认为一个片段是有帮助的。




我知道这已经被讨论过了,但是我想补充一点:

  • 碎片可以用来填充Menu并可以处理自己的MenuItem点击。 从而为您的活动提供更多的调制选项。 你可以做ContextualActionBar的东西等没有你的活动知道它,并可以从基本的东西你的活动处理(导航/设置/关于)基本解耦。

  • 有Frags的父Frag可以给你更多的选项来模块化你的组件。 例如,您可以轻松地将Frags换掉,将新的Frags放在寻呼机中或将其移除,重新排列它们。 所有没有你的活动知道任何关于它只是集中在更高层次的东西。




一个片段存在于一个活动中。

活动本身就是活的。




生活在活动中的碎片有:

  • 它自己的生命周期
  • 它自己的布局
  • 自己的孩子碎片等

把碎片看作是它所属的主要活动的一个子活动,它不能独立存在,它可以一次又一次地被调用/重用。 希望这可以帮助 :)




1.使用片段的目的是什么?

  • 答:
    1. 处理设备外形差异。
    2. 在应用程序屏幕之间传递信息。
    3. 用户界面组织。
    4. 高级用户界面隐喻。