2012-05-29 24 views
9

我已阅读Fragments documentation深度,我还没有看到任何对FragmentTransaction.attach()FragmentTransaction.detach()方法的引用。不过,我发现他们实际使用它们的多个教程和演示(如FragmentTabs Demo)。我的问题是:何时手动附加/分离Android碎片?

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

谢谢!

+0

术语“手”是什么混乱! – eRaisedToX

回答

1

作为未来发展方向,Android开发团队正在推动片段。他们介绍的理由记录在网络上的各个地方,我不会在这里进入。引入它们的原因之一是允许开发人员将其应用程序的特定功能封装到几乎独立的模块中,这些模块可以根据需要进行装载和卸载,并最大限度地利用Android平台提供的各种设备屏幕。

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

我不相信有什么硬性规定,当你应该手动分解片段。但是可能会出现这种情况,您可能需要分离一个片段而不是用另一个替换。但请注意,这不会破坏docs中所述的片段

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

Fragment对象被销毁,但是可见元素(如果有)是。当片段再次安装与重新创建attach()其观点,层次(docs):

再附加一个片段它以前一直从用户界面分离与分离(片段)之后。这会导致其视图层次被重新创建,附加到UI并显示。

正如我发现的那样,如果您的Fragment在后台需要更新其View层次结构,那么当您返回到View时它会立即更新。最终的结果是你得到了一个'丑陋的'重新绘制你的片段。我的意思是丑陋,因为它会让你的应用程序出现匆匆而不专业的重新绘制自己,而不是一个更理想的“随时可以离开”的空气。

如果维护最新的Fragment UI至关重要,那么有办法避免这种重新绘制。您可以简单地使用show()hide()来代替附加和分离您的碎片。这避免了重新创建你的视图层次的,但你必须要小心,没有在你的浏览试图重新绘制本身而片段是隐藏的;这会导致一个例外(我认为这是一段时间,因为我对这些东西进行了修饰)。

是没有错的安装和拆卸用手片段和你应该把这些方法由Android开发“刚刚在的情况下”,你需要做这样的事情所提供。此外,无论如何,我想通过这些更“原子”的方法调用replace()

至于当片段被破坏,很明显他们是当一个应用程序关闭,但否则我怀疑他们正好落入正常的日常垃圾破坏(但不可以引用我这句话!)。即如果没有对象的引用,则标记为销毁。