我已经深入阅读了Fragments documentation并且没有看到任何关于FragmentTransaction.attach()FragmentTransaction.detach()方法的引用。然而,我已经找到了多个教程和演示,他们实际使用它们(如FragmentTabs Demo)。我的问题是:
理论上说,你什么时候应该用手把碎片粘上/取下?
当碎片被附加/分离时会发生什么?(是否创建/销毁?暂停/继续?等等?)
手工附着/分离碎片是一种好的做法吗?
谢谢您!

最佳答案

作为前进的道路,android开发团队正在推出一些片段。他们介绍的原因在网络上的各个地方都有记录,我这里就不赘述了。引入这些功能的一个原因是,允许开发人员将其应用程序的特定功能封装到(几乎)可以根据需要加载和卸载的独立模块中,并最大化android平台可用的各种设备屏幕。
不幸的是(在我看来)有一些微妙的片段,可以抓住粗心的开发人员(我是其中之一)。虽然我不能声称自己是任何权威的碎片,我可以传递我所发现的,当使用他们。所以要回答你的问题:
我不相信有任何硬性规定,当你应该attach()/detach()碎片手工。但是,在某些情况下,您可能希望分离一个片段,而不是用另一个片段替换它。但是请注意,这不会破坏docs中所述的碎片。
从ui中分离给定片段。这与放在后堆栈上的状态相同:片段从ui中移除,但其状态仍由片段管理器进行主动管理。当进入这种状态时,它的视图层次结构被破坏。
片段对象已被销毁,但是可见元素(如果有)。使用attach()重新附加片段时,将重新创建其视图层次结构(docs):
在先前使用detach(fragment)从ui分离片段后,重新附加该片段。这将导致其视图层次结构被重新创建、附加到ui并显示。
正如我所发现的,如果您的后台片段需要更新其视图层次结构,以便在您返回视图时立即更新,那么这并不是特别有用。最终的结果是你得到了一个“丑陋的”你的碎片的画。我的意思是丑陋,因为它让你的应用程序看起来像是匆忙和不专业地重新绘制自己,而不是一个更令人期待的光滑的“准备离开”空气。
如果维护一个最新的片段ui是至关重要的,那么有一些方法可以避免这种重新绘制。你可以简单地show()hide()它们,而不是附加和分离片段。这样可以避免重新创建视图层次结构,但必须注意,当片段被隐藏时,视图中的任何内容都不会试图重新绘制自己;这将导致异常(我认为)。我已经有一段时间没有修补这些东西了)。
手工附加和分离片段并没有错,您可能应该认为这些方法是由android开发人员提供的,以防您需要这样做。此外,无论如何,我认为replace()调用这些更“原子”的方法。
当碎片被销毁时,很明显,当应用程序关闭时,它们会被销毁,但如果不是这样,我怀疑它们只是落入了正常的垃圾例程中(但不要引用我的话!)也就是说,如果没有提到这个物体,它就会被标记为毁灭。

07-24 09:49
查看更多