何时手动附加/分离Android碎片?

And*_*hon 9 android android-fragments

我已经深入阅读了Fragments文档,但我没有看到对FragmentTransaction.attach()FragmentTransaction.detach()方法的任何引用.但是,我发现了他们实际使用它们的多个教程和演示(如FragmentTabs Demo).我的问题是:

  1. 从理论上讲,你应该什么时候用手附上/拆除碎片?
  2. 片段连接/分离时会发生什么?(它被创建/销毁?暂停/恢复?等?)
  3. 用手连接/拆卸碎片是一种好习惯吗?

谢谢!

Ker*_*rry 3

Android 开发团队正在推动 Fragments 作为前进的方向。网络上的各个地方都记录了它们的介绍原因,我在此不再赘述。引入它们的原因之一是允许开发人员将其应用程序的特定功能封装到(几乎)独立的模块中,这些模块可以根据需要加载和卸载,并最大化 Android 平台可用的各种设备屏幕。

不幸的是(以我的愚见)Fragments 存在一些微妙之处,可能会吸引粗心的开发人员(我就是其中之一)。虽然我不能声称自己是 Fragments 的任何权威,但我可以传递我在使用它们时所发现的内容。所以回答你的问题:

我不认为有什么硬性规定应该attach()/detach()手工分割。然而,在某些情况下,您可能想要分离一个片段而不是用另一个片段替换它。但请注意,这不会破坏文档中所述的片段

从 UI 中分离给定的片段。这与将其放入返回堆栈时的状态相同:片段已从 UI 中删除,但其状态仍由片段管理器主动管理。当进入此状态时,其视图层次结构将被破坏。

Fragment 对象被销毁,但可见元素(如果有)是。当片段重新附加attach()其视图层次结构时,重新创建(文档):

在之前使用 detach(Fragment) 将片段从 UI 分离后,重新附加该片段。这会导致其视图层次结构被重新创建、附加到 UI 并显示。

正如我发现的那样,如果您在后台的片段需要更新其视图层次结构,以便当您返回视图时它会立即更新,那么这并不是特别有用。最终结果是您的片段会被“丑陋”地重新绘制。我的意思是“丑陋”,因为它让你的应用程序看起来像是匆忙且不专业地重新绘制自己,而不是一种更令人向往的光滑的“随时可用”的空气。

如果维护最新的 Fragment UI 至关重要,那么有一些方法可以避免这种重新绘制。您可以简单地显示()隐藏()它们,而不是附加和分离片段。这可以避免重新创建视图层次结构,但您必须小心,当片段隐藏时,视图中的任何内容都不会尝试重新绘制自身;这将导致异常(我想。自从我修改这个东西以来已经有一段时间了)。

手动附加和分离 Fragments 并没有什么问题,您可能应该认为这些方法是由 Android 开发人员提供的,“以防万一”您需要做这样的事情。此外,无论如何,我都会replace()调用这些更“原子”的方法。

至于片段何时被销毁,显然它们在应用程序关闭时被销毁,但否则我怀疑它们只是落入正常的垃圾例程(但不要引用我的话!)。即,如果没有对该对象的引用,则将其标记为销毁。