2016-04-20 138 views
2

我對很多片段都有唯一的活動。 在其中一個片段中,我現在必須在裏面有幾個選項卡。我能想到做起來的方法是:在多個片段中實現片段中的選項卡

解決方案1 ​​ - 創建一個新的活動只是爲,然後實現ViewPager:

我關於該解決方案主要關注的是這樣的: 到目前爲止,我的活動,我有以下流程: 片段1 - >片段2 - >片段 - > 3 - >片段4 - >和上...

現在,假設我必須實現這些選項卡片段3.

來自片段2,我開始一個放置viewpager的新活動(片段3在其中一個選項卡中,其他選項卡中的片段爲3)。然後我需要能夠顯示片段4。但由於應用程序中的所有片段都放置在原始活動上,因此會混淆流程或更糟。換句話說引起任一:

  1. 這將根本不會顯示片段4等,這是因爲運行的活動將被保持的突出部屏幕的一個,而所有的片段被放置在原始活性,這會在堆棧中。
  2. 不能夠從片段4返回到屏幕與片,然後從屏幕的選項卡「返回」至片段2,然後1.

解決方案2 - 活動對結果(與查看尋呼機):

爲選項卡屏幕創建的活動可能是返回到原始活動的活動。所以流量會是這樣: 片段2 - 的結果>新的活動 - >發送結果返回給原來的活動,指出它需要火起來的片段4現在 - >原活動打開片段4.

然而,這種情況下,如果我從片段4倒退,它會將我扔回片段2而不是該片段屏幕(3)。

解決方案3 - 標籤佈局:

似乎最佳的解決方案。 但是,要使用我需要的getChildFragmentManager(),這需要API 17及以上。我的API是16. 現在,如果我使用getSupportChildFragmentManager(),我將不得不使用片段v4。問題在於我的所有片段都是原生的,我不能將片段3更改爲v4,因爲之前的片段和後面的片段必須是v4。因爲我有大約50個片段,所以更改所有片段不是一個選項。

與解決方案3 我遇到的另外一個問題,就是它崩潰並打印:Error inflating class android.support.design.widget.TabLayout 我試圖創建一個新的文件夾命名值-V21,創造那裏的標籤佈局的styles.xml,但由於某種原因沒有幫助。

我希望我說清楚。

+0

*更改所有片段不是一個選項,因爲我有超過一百個片段。* - 這將轉化爲Android Studio中的幾個按鍵。真正的問題是爲什麼你有超過一百個碎片? – Luksprog

+0

大的應用程序。抱歉,我剛剛檢查過 - 這個數字有點誇張。實際數量約爲50個片段(不包括不同的視圖或內容視圖)。還是很多。 坦率地說,我有點不願意將它們全部更改爲v4,所以不會有任何新問題/錯誤/崩潰彈出。所以我不確定它將如何轉換所有這些問題到v4。但我可能是錯的。謝謝 – BVtp

+1

關於解決方案1,**如果**片段4將僅從包含ViewPager的片段3開始,我認爲沒有問題分解爲2個活動(1個直到片段3,另一個繼續)。解決方案2並不是一個真正的選擇。您也有從解決方案3派生的解決方案4:創建一個包含ViewPager的片段,並使Viewpager僅使用普通佈局(沒有嵌套片段),將處理這些佈局留給持有ViewPager的片段。這會給你帶來時間,直到API 16被遺忘,你可以重構它以使用本地嵌套片段。 – Luksprog

回答

1

您有從解決方案3派生的另一個解決方案。這是爲了保持你當前的導航(fragment1-> fragment2->等),並建立一個片段,以保持ViewPager的簡單佈局,而不是嵌套片段。這樣你就可以避免:導航問題,有問題的嵌套API不會出現在版本16(你打算支持)上,你也可以避免重構使用支持片段API。

如果稍後您放棄對版本16的支持,您可以重構嵌套片段中的每個簡單佈局,並使用本機getChildFragmentmanager()。

+0

由於某種原因,我不斷收到這個「錯誤膨脹TabLayout」崩潰.. 我已經將styles.xml添加到values-v21文件夾(解決方案似乎爲大家工作),但它沒有幫助.. – BVtp