我有iOS开发人员的背景,目前我正在使用Xamarin将应用程序从iOS移植到Android。在这方面,我对Android上的视图层次结构有一些疑问。
附加的UML图显示了应用程序片段之间交互的子集。我希望我的视图控制器类具有有限的责任,通过嵌套片段(相当于iOS上的容器视图控制器)以一种干净利落的方式封装功能。
然而,Android开发人员告诉我,由于严重的性能下降,嵌套碎片很糟糕。我并不关心性能下降,但应用程序当然应该是响应式的。我们只针对较新的平板电脑和手机。
在Android上应避免嵌套片段吗?什么是性能下降,如果有的话? (这里给出的例子约为1毫秒:http://developer.android.com/training/improving-layouts/optimizing-layout.html)
更新:应用程序的布局如下所示。 ModelControllerFragment内部的功能相当复杂,因为加载了2D / 3D模型并且可以完成模型操作(全屏),并且从应用程序中的多个位置使用来自ImageEditFlowActivity的流。 CommentListFragment也有一些非默认行为。在一个片段内具有所有这些功能是不可取的。
答案 0 :(得分:5)
我认为这就是你所需要的 - ChildFragmentManager
嵌套片段的主要问题是使用来自父片段的片段。主要问题是通过id在容器中找到正确的片段。当项目如此庞大时,它可能会产生很多错误。你可以试着想象什么时候
Fragment1 - >打开Fragment2 - >哪个打开Fragment3 - >必须将事件发送到Fragment1
如果我们想在当前布局的容器中显示下一个片段,那么这个逻辑就不容易实现。
与您的类图相关ChildFragmentManager是使用嵌套片段的最佳实践。
答案 1 :(得分:2)
如果不了解更多细节,很难给你一个替代方案。
不要嵌入碎片,它会让你的生活变得艰难。随着应用程序的增长,调试片段可能是一项艰巨的任务,管理生命周期并不是最简单的事情(实际上取决于您的所有应用程序尝试做什么)。因此,让自己的生活更轻松,不要嵌套碎片。
您应该使用现在提供的Design Support Library。例如,TabLayout是一个很好的方法,可以在"相同的"时间。
你可以拥有一个片段,将其他片段添加到堆栈中 - 这是完全合法且合理的事情。
无论如何,如果没有更多细节,很难提供额外的建议。虽然,有一件事我可以说 - 已经为iOS和Android完成了Xamarin开发 - 不要尝试使用与iOS相同的UI模型来创建Android应用程序。它不会起作用,它会让你头疼。 Android UI 很多更易于使用,不会过度复杂化。
基于OP的编辑更新: 您的视图通常适用于平板电脑吗此外,我不明白为什么OrderItemFragment需要存在 - 它只是一个包含组件的布局。我还认为这里的主要问题是你完全不了解Fragments的用法。例如,OrderListFragment似乎是Master / Detail设计的一个很好的候选者。 “详细信息”窗格看起来像是单个片段的良好候选者,其中包含多个视图或组件。我不明白你为什么要在这里嵌套片段或者想要实现什么。您应该考虑利用RelativeLayout和LinearLayout来完成View的外观任务,然后使用单个Fragment填充它们。