2013-12-21 53 views
2

我有兩個片段片段狀態,的Android,之後FragmentTransaction.add

fragmentA前景

現在我告訴fragmentB與FragmentTransaction.add(id, Fagment),(不.replace),所以fragmentA還活着,與fragmentB之上它,

現在我用back按鈕,這裏的fragmentB被破壞,留下fragmentA可見,

在這一刻,我如何知道fragmentA又回到了「前勤」,即onResume

注意onResume不叫,由於FragmentTransaction.add(id, Fagment),換句話說,當fragmentB顯示

fragmentA不走

非常感謝你的幫助

回答

7

如果你想知道當一個片段變爲可見再次,你可以先隱藏在創建B片段的片段交易:

fragmentTransaction.add(id, fragmentB).hide(fragmentA).addToBackStack(null); 

然後在片段A,覆蓋onHiddenCh已過時:

@Override 
public void onHiddenChanged(boolean hidden) { 
    super.onHiddenChanged(hidden); 
    // Handle visibility changed. Note this method is called only when the state is changed. 
} 

當按下後退按鈕時,分段事務將被反轉,並且分段的狀態將更改爲可見。有一件事你必須注意:我注意到隱藏狀態不會在活動輪換之間保留,所以你必須在onSaveInstanceState中執行你自己的記賬。我做了類似於你所要求的事情,因爲在我的情況下,片段視圖重新創建是很昂貴的。

在做這件事之前,您可能需要考慮以另一種方式處理碎片,例如使用.replace()而不是.add()。如果您的片段完全被新片段隱藏,那麼您可能不需要保留它,並且可以讓片段管理器在用戶點擊後退按鈕後將其返回。這樣,您就可以使用像onPause和onResume這樣的常規生命週期功能。

+1

我同意你的觀點,如果我使用.replace而不是.add,它將使用onPause和onResume,但我只使用它是因爲動畫(因爲我只有3個非常輕的片段) m使用左側的幻燈片動畫,使第二個視圖覆蓋第一個視圖,而不會使第一個視圖移動,我會用.hide方法嘗試它,謝謝! –

+1

工作,非常感謝! –

+1

+1感謝您對隱藏狀態的評論不會在配置更改中保留!這看起來像一個錯誤:/?無法想象這意味着以這種方式工作,因爲它真的搞砸了事情。另一個說明:afaik如果您需要與前一個片段進行通信,使用替換不是一個選項 - 至少這是我所聽到的。如果您需要原始片段,如果您可以重新創建它,我想它會沒問題。 – AgentKnopf

相關問題