我面对的场景是在我的应用程序中我有一个单个窗格和双窗格样式布局。而不是单独处理屏幕之间可能的每一个导航操作,对于每种不同的布局风格,我都使用了一种功能,在给定所需的屏幕时正确设置布局。片段:删除视图中的所有片段
它基本上是应用程序中每个屏幕的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,听起来很愚蠢,但从未想过使用标签来标识片段的放置位置,始终用它来标识片段的类型 –