2013-05-20 54 views
9

在我的應用程序有一個FrameLayout上我加入各種片段FragmentManager更換VS添加

FragmentManager fm = getSupportFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.replace(R.id.fragment_content, fragment, fargmentTag); 
ft.commit(); 

現在看來,當我使用ft.replace(R.id.fragment_content, fragment, fargmentTag);,然後在其他地方調用

getSupportFragmentManager().findFragmentByTag(fargmentTag); 

我總是得到null

但是,如果我使用add而不是replace此問題已修復,但另一個問題出現,每個片段添加到其他片段的頂部,我可以看到下面的其他片段。

我寧願使用replace,但我需要保存的片段狀態。另外要注意的是我沒有使用addToBackStack

回答

1

你剛剛基本上回答了你自己的問題。使用addToBackStack()

+0

會解決問題嗎? – user1730789

+0

試一下,但是是的,它應該。 – Ahmad

3

試試這個,它會工作。

FragmentManager fm = getSupportFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.replace(R.id.fragment_content, fragment, fragmentTag); 
ft.commitAllowingStateLoss(); 
+0

commit和commitAllowingStateLoss()之間的區別是什麼?並且這樣做是否會在沒有代碼的addToBackStack部分的情況下工作? – user1730789

+1

不同的是,當你想維護你使用的狀態commitAllowingStateLoss()[通常,你的狀態在方向改變時會丟失],而你的第二個問題會起作用。 – Thalaivar

+0

好的。謝謝。沒有代碼,與我,但會得到它的嘗試。 – user1730789

-1

FragmentManager:fm = getSupportFragmentManager();fm.executePendingxxxx,試試吧。

+0

提交後記得執行 –