我面對的場景是在我的應用程序中我有一個單個窗格和雙窗格樣式佈局。而不是單獨處理屏幕之間可能的每一個導航操作,對於每種不同的佈局風格,我都使用了一種功能,在給定所需的屏幕時正確設置佈局。片段:刪除視圖中的所有片段
它基本上是應用程序中每個屏幕的switch
語句,在每個屏幕中嵌套switch
語句來處理每種佈局樣式。這就是我在代碼中談到:
protected void setupScreen() {
switch(currentScreen) {
case SCREEN_ONE:
switch(currentLayout) {
case SINGLE_PANE:
// Perform actions to setup the screen
break;
case DUAL_PANE:
// Perform actions to setup the screen
break;
}
break;
case SCREEN_TWO:
switch(currentLayout) {
case SINGLE_PANE:
// Perform actions to setup the screen
break;
case DUAL_PANE:
// Perform actions to setup the screen
break;
}
break
// ... etc ....
}
}
在部分,在那裏我想執行的操作設置屏幕,這包括以下三個基本操作:
// Create the fragments if necessary
if (screenFragment == null) {
screenFragment = new myFragment();
}
// Remove the existing fragments from the layout views
// HOW???
// Add the fragments for this screen to the view
getSupportFragmentManager().beginTransaction().add(pane1.getId(), myFragment, "myFragment").commit();
正如你所看到的,我正在努力的是如何做第二步。 如何您是否從給定的View
中刪除了所有Fragment
s而不知道您想要刪除哪些?我找到的最接近的是FragmentTransaction.replace()
,它對每種情況都成功地做到了這一點:但是當你用同一個片段替換Fragment
時。在這種情況下,它不會刪除全部,然後添加(如文檔建議),它似乎只是刪除。這是使用兼容性庫的問題嗎?還是不應該使用FragmentTransaction.replace()
?
無論如何,我應該如何去做這件事?我是否需要編寫一個removeAllFragments()
函數來遍歷每個片段並將其分離,或者是否有辦法執行「二合一」功能聲稱要執行的操作的前半部分?
+1,聽起來很愚蠢,但從未想過使用標籤來標識片段的放置位置,始終用它來標識片段的類型 –