2016-01-20 89 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是處理嵌套片段的最佳實踐。