這是一個非常簡單的解決方案SupportFragmentManager
。 FragmentManager
是不是很方便,但仍然有效:
List<Fragment> fragmentList = getSupportFragmentManager().getFragments();
// You might have to access all the fragments by their tag,
// in which case just follow the line below to remove the fragment
if (fragmentList == null) {
// code that handles no existing fragments
}
for (Fragment frag : fragmentList)
{
// To save any of the fragments, add this check
// a tag can be added as a third parameter to the fragment when you commit it
if (frag.getTag().equals("<tag-name")) {
continue;
}
getSupportFragmentManager().beginTransaction().remove(frag).commit();
}
,或者,如果你不得不使用它(但不推薦):
.commitAllowingStateLoss();
如果你從拆除所有片段該視圖多次,你可能會考慮檢查,如果當前的frag爲空或isDetached()
或isRemoving()
或者你可能會得到一個NullPointerExceptions
。
更新15年6月9日:爲getSupportFragmentManger().getFragments()
文檔顯然是hidden了,但仍然工作就好在我的代碼。下面是對文件的截圖:
更新15年8月3日:如果你不使用的片段支持庫,不幸的是沒有getFragments()
可用,但仍有一對夫婦,更不方便的選擇。
- 給每個
fragment
一個在創建時tag
或id
,並遍歷它們,以根據需要處理每個fragment
。
- 創建使用
onAttachListener
所以每當一個新fragment
附接到activity
時間的監聽器,則可以存儲fragment
,然後通過該數據結構迭代根據需要來處理每個fragment
。
當不使用getSupportFragmentManager()
時,要處理事務,您需要改爲使用getFragmentManager()
。
您能否提供'getFragments()'方法的鏈接? – 2015-06-07 14:02:42
@IvanBlack,顯然沒有可用的鏈接。我相信當我寫這篇文章的時候它的文檔可用,但是API顯示它已經隱藏,認爲它仍然有效。 – craned 2015-06-09 16:09:49