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

我已经深入地阅读了Fragments文档 ,并且还没有看到对FragmentTransaction.attach()或FragmentTransaction.detach()方法的引用。 不过,我find了多个教程和演示,他们实际上使用它们(如FragmentTabs演示 )。 我的问题是:

  1. 从理论上说,你应该什么时候手动附加/拆卸碎片?
  2. 当碎片被连接/分离时究竟发生了什么? (是创build/销毁?暂停/恢复?等?)
  3. 手动附加/分离你的碎片是否是一个好习惯?

谢谢!

Solutions Collecting From Web of "何时手动附加/分离Android碎片?"

Android开发团队正在推动片段作为前进的方向。 有介绍的原因logging在网上的各个地方,我不会在这里进入。 引入这些技术的一个原因是允许开发人员将其应用程序的特定function封装到(几乎)独立的模块中,这些模块可以根据需要进行装载和卸载,并最大限度地利用Android平台提供的各种设备屏幕。

不幸的是(在我的拙见中)Fragments有一些微妙之处,可以把不知情的开发者(我是其中之一)赶出去。 虽然我不能声称对碎片有任何权威,但我可以传播我在使用它们时发现的东西。 所以要回答你的问题:

我不相信有什么硬性规定,你应该手工attach()/detach()片段。 但是,可能会出现这种情况,您可能需要分离一个片段,而不是将其replace为另一个片段。 但请注意,这不会破坏文档中所述的片段

从UI中分离给定的片段。 这与将其放在后端堆栈上时的状态相同:将片段从UI中删除,但其状态仍由片段pipe理器主动pipe理。 进入这个状态时,它的视图层次被破坏。

片段对象被破坏,但是可见的元素(如果有的话)是。 当片段用attach()重新附加时,它的View层次被重新创build( docs ):

之前用分离(Fragment)从UI分离后再重新附加一个片段。 这将导致其视图层次被重新创build,附加到UI并显示。

就像我发现的那样,如果你的背景中的Fragment需要更新它的View层次结构,那么它就不是特别有用,所以当你回到View中时,它是立即更新的。 最终的结果是,你得到了一个丑陋的重新画你的片段。 我的意思是丑陋,它会让你的应用程序出现匆匆而不专业的重新绘制,而不是一个更合乎需要的“准备离开”的空气。

如果维护一个最新的Fragment UI是至关重要的,那么有办法避免这个重新绘制。 您可以简单地显示()和隐藏()它们,而不是附加和分离您的碎片。 这样可以避免重新创build视图层次结构,但是必须注意,在视图中隐藏片段时,视图中的任何内容都不会尝试重新绘制; 这将导致一个例外(我想,这是一段时间,因为我修补这些东西)。

手动附加和分离碎片没有任何问题,您应该将这些方法看作是Android开发人员“即时”提供的,您需要做这样的事情。 另外,我把image replace()调用映射到这些更“primefaces”的方法。

就碎片被摧毁而言,当应用程序closures时显然它们被破坏,否则我怀疑它们只是属于正常的垃圾程序(但不要引用我的话)。 即如果没有对象的引用,那么它被标记为销毁。