2011-05-28 83 views
4

我目前正在使用HC兼容性軟件包測試具有多窗格的Fragment -ised視圖,並且有很多難以處理方向更改。使用碎片處理方向更改

Host活動有2個窗格在橫向(menuFramecontentFrame),並且僅在肖像menuFrame中,向其中適當的片段被加載。如果我在兩個窗格中都有東西,但是將方向改爲縱向,我會得到一個NPE,因爲它試圖在(不存在的)contentFrame中加載片段中的視圖。在內容片段中使用setRetainState()方法不起作用。我怎樣才能解決這個問題,以防止系統加載一個不會顯示的片段?

非常感謝!

回答

3

看來,onCreateViewMethod是造成問題;如果容器爲空,它必須返回null:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    if (container == null) // must put this in 
     return null; 
    return inflater.inflate(R.layout.<layout>, container, false); 
} 
+1

雖然這並沒有消除片段。它只是防止它被繪製。它仍然在記憶中,每當你旋轉時你都會複製你的片段。 – 2014-07-16 07:30:36

+0

我同意馬蒂 – prettyvoid 2014-10-20 19:56:43

0

可能不是理想的答案,但如果你有contentFrame肖像並在活動只加載了menuFrame當savedInstanceState爲null,則您的內容框架片段將在改變方向時顯示。

雖然不是很理想,但如果您點擊後退按鈕(根據需要多次),您將永遠不會看到菜單片段,因爲它沒有加載到contentFrame中。

很遺憾,FragmentLayout API演示並未在方向更改中保留正確的片段狀態。無論如何,在思考這個問題的過程中,嘗試了各種各樣的東西,我不確定是否有直接的答案。到目前爲止(未經測試)提出的最佳答案是在縱向和橫向上具有相同的佈局,但在detailsFrame中存在某些內容時隱藏menuFrame。同樣顯示它,當後者爲空時隱藏frameLayout