2016-01-20 75 views
1

我有一个iOS开发人员的背景,我正在使用Xamarin将应用从iOS移植到Android。在这方面,我有一些关于Android上的视图分层的问题。在Android中嵌套片段不好?

所附UML图显示了应用程序片段之间的相互作用的子集。我希望我的视图控制器类具有有限的责任,通过嵌套片段(相当于iOS上的容器视图控制器)以整洁和清晰的方式封装功能。

然而,我被一个Android开发者告知,嵌套片段不好由于严重的性能下降。我并不在乎性能下降,但应用程序当然应该是有响应的。我们只针对较新的平板电脑和手机。

应该在Android上避免片段嵌套?如果有的话,性能会下降吗? (这里给出〜1毫秒的例子:http://developer.android.com/training/improving-layouts/optimizing-layout.html

谢谢! enter image description here

更新:应用程序的布局如下所示。 ModelControllerFragment中的功能相当复杂,因为加载2D/3D模型并且可以完成模型操作(全屏),并且从应用程序中的多个位置使用来自ImageEditFlowActivity的流。 CommentListFragment也有一些非默认行为。将所有这些功能放在一个片段内是不可取的。 enter image description here

回答

1

不知道太多的细节,很难给你一个选择。

不要嵌套碎片,它会让你的生活变得艰难。随着应用程序的增长以及管理生命周期不是最简单的事情(实际取决于所有应用程序尝试执行的操作),调试碎片可能是一项艰巨的任务。所以,让自己的生活更轻松,不要堆砌碎片。

您应该使用现在很容易提供的Design Support Library。例如TabLayout是在“相同”时间有3个片段可用的好方法。

你可以有一个片段,增加了其他碎片堆 - 这是完全做到合法,合理的事情。

无论如何,没有更多的细节,很难给出更多的建议。尽管我曾经说过的一些事情 - 在为iOS和Android完成Xamarin开发的过程中,不要尝试使用您在iOS上执行的相同UI模型来创建Android应用程序。它不会工作,它会让你的头受伤。 Android UI是更简单的工作,不要过度复杂它。

基于OP编辑的更新: 您的视图通常用于平板电脑吗?另外,我不明白为什么OrderItemFragment需要存在 - 它只是一个包含组件的布局。我也认为这里的主要问题是你完全不了解碎片的使用。例如OrderListFragment似乎是Master/Detail设计的一个很好的候选者。您的详细信息窗格看起来很适合具有多个视图或组件的单个片段。我不明白为什么你会想在这里嵌套片段或什么可以完成。您应该考虑利用RelativeLayout和LinearLayout来完成视图的外观,然后使用单个片段填充它们。

+0

我已更新我的问题,并提供了一些更多详细信息。我同意事情不应该过于复杂,但抽象复杂性的概念也适用于视图控制器。我会看看TabLayouts。当我读到你的回答时,你建议不要因为“会使生活更艰难”而不是因为性能问题而嵌套碎片? – borrel

4

我觉得这是你所需要的 - ChildFragmentManager

在嵌套片段主要问题是工作与父片段此片段。主要问题是通过id在容器中查找正确的片段。当项目如此巨大时,可能会造成很多错误。你可以试着想象一下,当

片段1 - >打开Fragment2 - >其打开Fragment3 - >这不得不发事件片段1

这个逻辑是不容易实现的,如果我们要显示的下一个片段 - 当前布局的容器。

与您的类图相关ChildFragmentManager是处理嵌套片段的最佳实践。